思路:
通过样例不难猜出(a, b - r)这个点,然后开开心心的去交上,结果成功wa了。之后就感觉是不是还有别的情况,通过画图可以看出,当b < r时,如果还用上面这种情况,那距离不如中直接走x轴短,所以当b < r时,我们直接让他走x轴就好了,直接走x轴那距离总共最短就是2a - r
#include <bits/stdc++.h> using namespace std; int main() { int T; cin >> T; for(int i = 1; i <= T; i ++ ) { long long a, b, r; cin >> a >> b >> r; if(b > r) printf("Case #%d: %.2lf", i, 2.0 * sqrt(a * a + (b - r) * (b - r)) - r); else printf("Case #%d: %.2lf", i, 2.0 * a - r); if(i != T) cout << endl; } return 0; }
思路:
好像有好多人理解错题意了,其实没有这么复杂,就是判断输入的每一位数,看看和给的A相差的绝对值是不是小于r的就可以了,这题关键是输入,因为他没给你具体要输入多少个数,所以我们可以边输入边记录n,或者getline一行后stringstream处理
#include <bits/stdc++.h> using namespace std; const int N = 100010; int s[N]; int main() { int x; int n = 0; while(cin >> x) s[n ++ ] = x; int a = s[n - 2], r = s[n - 1]; n -= 2; sort(s, s + n, greater<int>()); for(int i = 0; i < n; i ++ ) if(abs(s[i] - a) <= r) cout << s[i] << ' '; return 0; }
思路:
给的数据挺多,按题意模拟就好
#include<bits/stdc++.h> using namespace std; typedef long long LL; vector<int>p[100010]; int main() { int t; cin >> t; for(int w = 1; w <= t; w ++ ) { printf("Case #%d: \n",w); int n, m; cin >> n >> m; for(int i = 0; i <= n; i ++ ) p[i].clear(); for(int i = 1; i <= n; i ++ ) { int k; cin >> k; while(k--) { int a; cin >> a; p[i].push_back(a); } } while(m -- ) { bool flag = false; int now = 0; int a, b; cin >> a >> b; if(a > n) flag = true; now = a; while(b -- ) { int c; cin >> c; if(c > p[now].size()) flag = true; else now = p[now][c - 1]; } if(flag) cout << "Packet Loss"; else cout << now; if(w != t || m != 0) cout << endl; } } return 0; }