Language: Default Physics Experiment
Description Simon is doing a physics experiment with N identical balls with the same radius of R centimeters. Before the experiment, all N balls are fastened within a vertical tube one by one and the lowest point of the lowest ball is H meters Simon wants to know where are the N balls after T seconds. Can you help him? In this problem, you can assume that the gravity is constant: g = 10 m/s2. Input The first line of the input contains one integer C (C ≤ 20) indicating the number of test cases. Each of the following lines contains four integers N, H, R, T. 1≤ N ≤ 100. 1≤ H ≤ 10000 1≤ R ≤ 100 1≤ T ≤ 10000 Output For each test case, your program should output N real numbers indicating the height in meters of the lowest point of each ball separated by a single space in a single line. Each number should be rounded to 2 digit after the decimal point. Sample Input 2 1 10 10 100 2 10 10 100 Sample Output 4.95 4.95 10.20 Source |
题意:将N个半径为R的球放入一个圆桶(圆桶口径刚好放入一个球),将圆桶竖直放着,最下端距离地面H高度,让球每隔一秒自由下落,求T时刻各个球距离地面的高度。
思路:所有的球都一样可以忽视它们的碰撞,视为互相穿过继续运动。这样就可以分别单独求出每个球T时刻的高度后排序就是答案了。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <string> #include <map> #include <stack> #include <vector> #include <set> #include <queue> #pragma comment (linker,"/STACK:102400000,102400000") #define maxn 105 #define MAXN 2005 #define mod 1000000009 #define INF 0x3f3f3f3f #define pi acos(-1.0) #define eps 1e-6 #define lson rt<<1,l,mid #define rson rt<<1|1,mid+1,r typedef long long ll; using namespace std; int N,T; double H,R; double ans[maxn]; double solve(int T) { if (T<0) return H; double t=sqrt((2*H)/10.0); int k=(int)T/t; if (k%2) return H-5.0*(k*t+t-T)*(k*t+t-T); else return H-5.0*(T-k*t)*(T-k*t); } int main() { int c; scanf("%d",&c); while (c--) { scanf("%d%lf%lf%d",&N,&H,&R,&T); for (int i=0;i<N;i++) ans[i]=solve(T-i); sort(ans,ans+N); printf("%.2f",ans[0]); for (int i=1;i<N;i++) printf(" %.2f",ans[i]+2*R*i/100.0); printf("\n"); } return 0; } /* 2 1 10 10 100 2 10 10 100 */
代码: