Physics Experiment
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 2936   Accepted: 1045   Special Judge

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 above the ground. At beginning of the experiment, (at second 0), the first ball is released and falls down due to the gravity. After that, the balls are released one by one in every second until all balls have been released. When a ball hits the ground, it will bounce back with the same speed as it hits the ground. When two balls hit each other, they with exchange their velocities (both speed and direction).

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 NHRT.
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个小球从一管道开始下落,每秒钟下落一个,已知管口离地面的距离h及小球半径r,所有的碰撞均是弹性碰撞,求ts时,各个小球的位置;

 
分析:这道题很类似挑战上的一道蚂蚁的题目,那道题目核心的思想就是,蚂蚁碰撞后掉头的效果与碰到后直接“穿过”效果是一样的;不过那道题目蚂蚁没有半径,这道题目不一样的地方就是小球是有半径的,怎么处理呢?
 
分三个过程来看吧:1,假所有的小球都是没有半径的,且从同一高度每隔1s掉下,,很显然,这个时候求t时的小球的位置,只要求出单独的小球位置,然后再sort排个序就好,(sort排序是因为小球相对位置不变,即刚释放时最下边的小球不管怎么跳还是在最下面),这个时候跟蚂蚁是几乎差不多的,碰了等于没碰。
2.假设两个小球是有半径的,且是紧挨着每隔1s落下,这时候,因为小球有半径,其实碰了还是等于没碰,比如,假设如下图所示
a,b两球碰撞时,由速度交换可知,可以当做a向上瞬移2*r,且保持原来的速度,b向下瞬移2*r,且可保持原来的速度,那么a能够达到的最大高度变成了原来的b的初始位置(假设b原来放在a的上方),b能够达到的最大高度就变成了a(因为瞬移的结果是增大了a的2*h的势能,削弱了b的2*h的势能),最终的结果是a变成了原来的b球,B变成了原来的a球,总的效果其实就是没有碰撞,多个球的于此类似。其实核心思想是,每次碰撞时,a球起初(刚释放时)势能要比b球少2*r(因为相对顺序不变),而碰撞后的瞬移使得a球增加了2*r的势能,b球减少了2*r的势能,因此最后变成了a比b还多了2*r的势能,也就是a,b的互换了。
3.其实这样做的出来了,不过为了计算简便,可以再来一个简化,假设两个球紧挨着同一时刻一起下落会怎样?显然,在上面的球高度始终要比下面的球高2×r,因此计算上可以就计算下面的一个球,其他球累加2*r就好
 
 
 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath> using namespace std; const int MAX = ;
const double g = 10.0;
int N,H,R,T;
double y[MAX]; double cal(int T)
{
if(T < ) return H;
double t = sqrt( * H / g);
int k = (int) T / t;
if(k % == )
{
double d = T - k * t;
return H - g * d * d / ;
}
else
{
double d = k * t + t - T;
return H - g * d * d / ;
}
} int main()
{
int C;
scanf("%d",&C);
while(C--)
{
scanf("%d%d%d%d",&N,&H,&R,&T);
for(int i = ; i <N; i++)
{
y[i] = cal(T - i);
}
sort(y ,y + N);
for(int i = ; i <N;i++)
{
printf("%.2f",y[i] + * R * (i) / 100.0);
if (i ==N-) cout << "\n";
else cout << " ";
}
}
return ;
}

POJ 3684 Physics Experiment(弹性碰撞)的更多相关文章

  1. poj 3684 Physics Experiment 弹性碰撞

    Physics Experiment Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1489   Accepted: 509 ...

  2. poj 3684 Physics Experiment(数学,物理)

    Description Simon ), the first ball is released and falls down due to the gravity. After that, the b ...

  3. POJ 3684 Physics Experiment

    和蚂蚁问题类似. #include<cstdio> #include<cstring> #include<cmath> #include<vector> ...

  4. POJ:3684-Physics Experiment(弹性碰撞)

    Physics Experiment Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3392 Accepted: 1177 Sp ...

  5. Greedy:Physics Experiment(弹性碰撞模型)(POJ 3848)

    物理实验 题目大意:有一个与地面垂直的管子,管口与地面相距H,管子里面有很多弹性球,从t=0时,第一个球从管口求开始下落,然后每1s就会又有球从球当前位置开始下落,球碰到地面原速返回,球与球之间相碰会 ...

  6. Physics Experiment 弹性碰撞 [POJ3684]

    题意 有一个竖直的管子内有n个小球,小球的半径为r,最下面的小球距离地面h高度,让小球每隔一秒自由下落一个,小球与地面,小球与小球之间可视为弹性碰撞,让求T时间后这些小球的分布 Input The f ...

  7. Physics Experiment(POJ 3684)

    原题如下: Physics Experiment Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3583   Accepte ...

  8. 弹性碰撞 poj 3684

    Simon is doing a physics experiment with N identical balls with the same radius of R centimeters. Be ...

  9. poj 3684

    Physics Experiment Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 784   Accepted: 266 ...

随机推荐

  1. compass框架的sprite雪碧图的用法简要

    ---恢复内容开始--- **简介** CSS SPRITE 即 CSS雪碧,即是将诸多图片合成一张图片,然后使用CSS 的background和background-position属性渲染. 这样 ...

  2. Week11《java程序设计》作业总结

    Week11<java程序设计>作业总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 答: 2. 书面作业 本次PTA作业题集多线程 1. 源代码 ...

  3. Linux文件在系统中传输

    一.文件的传输 1.命令:scp scp file user@ip:/dir ##把当前系统目录下的文件file复制到另一个系统目录下 scp user@ip:/file dir 2.命令:rsync ...

  4. recovery.conf文件详解

    在恢复过程中,用户可以通过使用recovery.conf文件来指定恢复的各个参数,如下: 归档恢复设置 restore_command:用于获取一个已归档段的XLOG日志文件的命令 archive_c ...

  5. ADO Recordset 对象链接

    http://baike.baidu.com/link?url=4Xdc46R8M5uj-BbOGaH761N5oDEYlGQJFeR2WbPwx1iQBusAUKU3qbWcHZCMmayatj9n ...

  6. SQL Server里查询表结构命令

    现提供两条命令查询表结构: 1.sp_help table_name;           如: [sql] sp_help Student;     2.sp_columns table_name; ...

  7. 如何使用JFinal开发javaweb

    介绍开始: 编辑器:MyEclipse; 数据库:MySQL; 服务器:tomcat; 1 首先新建web项目 要强调的是Target runtime必须选择为None.然后点击两次Next,选中创建 ...

  8. keras channels_last、preprocess_input、全连接层Dense、SGD优化器、模型及编译

    channels_last 和 channels_first keras中 channels_last 和 channels_first 用来设定数据的维度顺序(image_data_format). ...

  9. Android Hook 框架 Cydia_substrate 详解

    目录(?)[-] 使用方法 短信监控实例 1.Cydia_Substrate 框架简介 Cydia Substrate是一个代码修改平台.它可以修改任何主进程的代码,不管是用Java还是C/C++(n ...

  10. LOJ2424 NOIP2015 子串 【DP】*

    LOJ2424 NOIP2015 子串 LINK 题目大意是给你两个序列,在a序列中选出k段不重叠的子串组成b序列,问方案数 首先我们不考虑相邻的两段,把所有相邻段当成一段进行计算 然后设dpi,j, ...