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

题目大意:有一个与地面垂直的管子,管口与地面相距H,管子里面有很多弹性球,从t=0时,第一个球从管口求开始下落,然后每1s就会又有球从球当前位置开始下落,球碰到地面原速返回,球与球之间相碰会发生完全弹性碰撞(各自方向改变,速率变为相碰时另一个球的速率)问最后所有球的位置?
这一题又是一道弹性碰撞模型的题目,和Liner World有点像,但是这一题不要求输出球的名字,而是要你求得各个球的高度
这道题我们只用明白一个道理就很方便了:
首先我们来看一个球的情况:
一个球从H的高度下落,碰到地面原速返回,那么他在t时刻的位置由下列方程决定:
t=sqrt(2*H/g);
k=(int)(T/t);
Hi=H-(T-k*t)*(T-k*t)*g/2; (当K是偶数)
Hi=H-(k*t+t-T)*(k*t+t-T)*g/2; (当K是奇数)
如果有两个球:
如果第一个球没有碰地,那么两个球的高度将由Hi=H-(T-k*t)*(T-k*t)*g/2唯一确定
如果第一个球碰地了,那么在接下来的某一时刻两个球一定会相碰且交换速度,可以看成是擦身而过,但问题还没完,如果相碰后不再相碰,要确定高度,那么究竟怎么确定呢?
我们知道因为各个球可以看成独立的,根据题意,第2个球的高度应该要加上两个球的半径并除以100.0(单位是cm看清楚!),然后交换速度过后我们虽然2和1交换了状态,但是状态不变,我们还是可以把他们当成一个球看,但是同时注意,这两个球是有半径的!(一开始我没有想到半径打死都想出来为什么,模拟了一下才明白),最后答案为从低到高排列的小球逐次加上0和2r的高度即可(如果存在交换一定要排列,否则两个球就会重叠了就不对了)。
把上面这两种情况推广到多个球,我们就可以得到解决方法了
#include <iostream>
#include <algorithm>
#include <functional>
#include <math.h> using namespace std; double cal(const double, const double, const double);
const double g = 10.0;
static double h[]; int main(void)//很巧妙的一道物理模型题
{
int case_sum, N;
double H, R, T, seg_t;
scanf("%d", &case_sum); while (case_sum--)
{
scanf("%d%lf%lf%lf", &N, &H, &R, &T);
seg_t = sqrt( * H / g); for (int i = ; i < N; i++)
h[i] = cal(seg_t, T - i, H);//每一个间隔减少1s
sort(h, h + N);
for (int i = ; i < N; i++)
printf("%.2f ", h[i] + * R*i / 100.0);
printf("\n");
}
return EXIT_SUCCESS;
} double cal(const double t, const double T, const double H)
{
if (T < )
return H;//相当于还没开始下落就直接
int k =(int)(T / t);//看究竟是上升阶段还是下降阶段。
if (k % == )//下降阶段
return H - g*(T - k*t)*(T - k*t) / ;
else
return H - g*(k*t + t - T)*(k*t + t - T) / ; }

Greedy:Physics Experiment(弹性碰撞模型)(POJ 3848)的更多相关文章
- poj 3684 Physics Experiment 弹性碰撞
Physics Experiment Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1489 Accepted: 509 ...
- Physics Experiment 弹性碰撞 [POJ3684]
题意 有一个竖直的管子内有n个小球,小球的半径为r,最下面的小球距离地面h高度,让小球每隔一秒自由下落一个,小球与地面,小球与小球之间可视为弹性碰撞,让求T时间后这些小球的分布 Input The f ...
- POJ 3684 Physics Experiment(弹性碰撞)
Physics Experiment Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2936 Accepted: 104 ...
- Physics Experiment(POJ 3684)
原题如下: Physics Experiment Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3583 Accepte ...
- poj 3684 Physics Experiment(数学,物理)
Description Simon ), the first ball is released and falls down due to the gravity. After that, the b ...
- POJ:3684-Physics Experiment(弹性碰撞)
Physics Experiment Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3392 Accepted: 1177 Sp ...
- [POJ3684]Physics Experiment
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1363 Accepted: 476 Special Judge ...
- POJ3684 Physics Experiment 【物理】
Physics Experiment Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1031 Accepted: 365 ...
- POJ 3684 Physics Experiment
和蚂蚁问题类似. #include<cstdio> #include<cstring> #include<cmath> #include<vector> ...
随机推荐
- java中堆和栈的区别
从宏观上来讲,栈内存:存储基本数据类型.堆内存:存储实际的对象内容.说明白点就是new出来的东西. int a = 3; int b = 3; a = 4; 编译器首先会处理int a = 3;将a进 ...
- CentOS-6.5安装zabbix2.4.4
使用epel源 (检查网络连接是否正常) //这里使用epel源 [root@localhost /]# wget -O /etc/yum.repos.d/CentOS-Base.repo ht ...
- iOS开发——网络篇——HTTP/NSURLConnection(请求、响应)、http响应状态码大全
一.网络基础 1.基本概念> 为什么要学习网络编程在移动互联网时代,移动应用的特征有几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图只有通过网络跟外界进行数据交互.数据更新, ...
- 简述JavaScript的运行机制
想要理解JavaScript的运行机制,需要分别深刻理解以下几个点: · JavaScript的单线程机制 · 任务队列(同步任务和异步任务) · 事件和回调函数 · 定时器 · Event Loop ...
- 用js判断页面是否加载完毕
用document.onreadystatechange的方法来监听状态改变, 然后用document.readyState == "complete"判断是否加载完成 docum ...
- 教你搭建SpringSecurity3框架( 更新中、附源码)
源码下载地址:http://pan.baidu.com/s/1qWsgIg0 一.web.xml <?xml version="1.0" encoding="UTF ...
- OpenCV成长之路(9):特征点检测与图像匹配
特征点又称兴趣点.关键点,它是在图像中突出且具有代表意义的一些点,通过这些点我们可以用来识别图像.进行图像配准.进行3D重建等.本文主要介绍OpenCV中几种定位与表示关键点的函数. 一.Harris ...
- How to tile small texture image onto page as its background
You don’t need to set a big size image as the background of pages if the image is texture or uniform ...
- iis不支持下载apk的解决办法
添加mime类型即可 扩展名:".apk", MIME类型:"application/vnd.android.package-archive"
- mapReduce编程之google pageRank
1 pagerank算法介绍 1.1 pagerank的假设 数量假设:每个网页都会给它的链接网页投票,假设这个网页有n个链接,则该网页给每个链接平分投1/n票. 质量假设:一个网页的pagerank ...