POJ 3684 Physics Experiment(弹性碰撞)
Description
用N个半径为R厘米的求进行如下实验
在H米高的位置设置了一个圆筒,将求竖直放入(从上到下第i个球的底端距离地面高度为H+2R)。实验开始时最下面的球开始掉落,此后每一秒又有一个球开始掉落。不计空气阻力,并假设球与球或地面间的碰撞是弹性碰撞
请求出实验开始后T秒钟时每个球底端的高度。假设重力加速度g=10m/s^2
Input
第一行为用例组数t,每组用例占一行包括四个整数N,H,R,T分别表示球的个数,圆筒底端距地面距离,球半径,查询时间T
Output
对于每组用例,输出T秒后这N个球底端距离地面距离
Sample Input
2
1 10 10 100
2 10 10 100
Sample Output
4.95
4.95 10.20
Solution
首先考虑一下只有一个球的情形,从高度的位置下落需要花费时间为
这样的话,在时刻T内,令k为满足kt<=T的最大整数,那么
接下来再考虑多个球的情形,与Ants类似,当把两球看作质点,即R=0时就可以无视它们的碰撞,视作直接互相穿过继续运动。由于在有碰撞时球到达顺序不会发生改变,所以无视碰撞,将计算得到的坐标进行排序后,就可以知道每个球的最终位置。而R>0时只需将下方开始的第i个球在按照R=0时计算的结果上加上2Ri就好了
Code
#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 101
int M,N,H,R,T;
double g=10.0;
double y[maxn];//球的最终位置
double solve(int T)//求出T时刻球的位置
{if(T<0)//T<0说明该球还未从圆筒中下落 return H;double t=sqrt(2*H/g);int k=(int)(T/t);if(k%2==0){double d=T-k*t;return H-g*d*d/2;}else{double d=k*t+t-T;return H-g*d*d/2;}
}
int main()
{scanf("%d",&M);while(M--){scanf("%d%d%d%d",&N,&H,&R,&T);for(int i=0;i<N;i++)y[i]=solve(T-i);sort(y,y+N);//对坐标排序 for(int i=0;i<N;i++)printf("%.2lf%c",y[i]+2*R*i/100.0,i==N-1?'\n':' ');//按格式输出 }return 0;
}
POJ 3684 Physics Experiment(弹性碰撞)相关推荐
- poj 3684 数学物理题 Physics Experiment
被代班和建模占据了大堆时间.现在开始继续做ACM了,终于开始做了. 这题韦广说是线段树,让我看看.看了之后觉得是推导的数学题. 所有的球都按第一个球算出来(除了没动的球),然后加上和第一个球的距离即可 ...
- Physics Experiment 物理题
知道下面这两个结论题目就会辣 1.球心发生弹性碰撞的相同两球,相当于速度交换 2.每个球只能在h范围内进行变化,因为之前落下的会占据高度,这个球下面一定有前面落下球的个数 然后把所有时间求得的高度排序 ...
- 备战ccpc分站赛:秦皇岛和威海站(数论模块和dp模块)
挑战程序设计竞赛(第2版)练习题 tips:难度(个人主观判断): 简单* 简单但卡思维 ** 中 *** 中稍加思考 **** 难 ***** 1 . 记录结果再利用的"动态规划" ...
- 2000门课程名称翻译大全,写英文简历时用得着的
C 语言 C Language CAD 概论 Introduction to CAD CAD/CAM CAD/CAM COBOL语言 COBOL Language 生物物理学 Biophysi ...
- 2000 门课程名称英文翻译大全
C 语言 C Language CAD 概论 Introduction to CAD CAD/CAM CAD/CAM COBOL语言 COBOL Language 生物物理学 Biophysics 真 ...
- 微波技术在计算机的应用论文,计算机数据自动处理在微波实验中的应用.doc
计算机数据自动处理在微波实验中的应用 [摘要]微波实验处理数据,Microwave experimental modern physics experiment will do one of the ...
- 成绩单课程翻译参考总表
生物物理学 Biophysics 真空冷冻干燥技术 Vacuum Freezing & Drying Technology 16位微机 16 Digit Microcomputer ALGOL ...
- ligo 原理_在LIGO的实验中,Ubuntu被用来检测引力波
ligo 原理 发表于: 管理员 6天,3小时前 (Posted by: admin 6 days, 3 hours ago) (Comments) ( 评论 ) Laser Interferomet ...
- 赢得阵亡将士纪念日的十大怪异项目
What better way to kick off your summer than building something to dazzle your neighbors with a symp ...
- 2000门课程名称翻译大全
2000门课程名称翻译大全 BASIC 语言及应用 BASIC Language & Application C 语言 C Language CAD 概论 Introduction to CA ...
最新文章
- 【文本分类】Deep Pyramid Convolutional Neural Networks for Text Categorization
- odoo tree视图过滤数据_在EA中建立优雅的仪表板视图
- sdram 时钟相位_stm32f429主频大于160MHz时,sdram数据不稳定
- SAP UI5应用点了search按钮后的实现调试
- ngix莫名挂掉 signal process started
- python 求最大值实例_Python 求数组局部最大值的实例
- 7 分钟全面了解位运算
- shell数组使用技巧
- Scala学习之Option类
- 存数据返回他的序列号id_雪花般的分布式唯一ID雪花算法
- 为你的软件选择正确的许可证方案
- 【转下载】黑莓7290中文说明书
- mac删除默认ABC输入法,mac删除自带ABC输入法
- close函数 qt_QT中的close、closeEvent和析构函数的理解(基础知识)
- [数据库] MariaDB安装及使用
- Transferable Joint Attribute-Identity Deep Learning for Unsupervised Person Re-Identification阅读总结
- 时滞/延迟微分方程(delay-differential equation)
- 川藏南线(318)之旅
- Us biological——生物试剂盒适用于科学应用和环境
- 数字IT基础-数据采集总线