物理实验

  题目大意:有一个与地面垂直的管子,管口与地面相距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)的更多相关文章

  1. poj 3684 Physics Experiment 弹性碰撞

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

  2. Physics Experiment 弹性碰撞 [POJ3684]

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

  3. POJ 3684 Physics Experiment(弹性碰撞)

    Physics Experiment Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2936   Accepted: 104 ...

  4. Physics Experiment(POJ 3684)

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

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

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

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

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

  7. [POJ3684]Physics Experiment

      Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1363   Accepted: 476   Special Judge ...

  8. POJ3684 Physics Experiment 【物理】

    Physics Experiment Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1031   Accepted: 365 ...

  9. POJ 3684 Physics Experiment

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

随机推荐

  1. PHP中spl_autoload_register()函数

    spl_autoload_register — 注册给定的函数作为 __autoload 的实现 官方地址:http://php.net/manual/zh/function.spl-autoload ...

  2. ApacheServer-----关于443端口被占用的解决方法

    最经公司项目需要经过Apache服务器转发,自己也下载了ApacheServer,但是在启动的过程中,遇到443端口被占用,网上看了一些解决方法,都不对,没有解决问题. 执行启动命令httpd -k ...

  3. JavaScript实现联想校招员工信息展示

    原文摘自我的前端博客,欢迎大家来访问 http://www.hacke2.cn 起因 今天和豪哥聊天,才知道他是我老乡,而且特别近..真的感觉他是我的贵人,这是他从 联想校招扣出来的,我们就用Java ...

  4. thinkphp 行为扩展以及插件机制介绍

    首先行为扩展这个概念是TP架构的核心组成之一,关于行为的解释我就粗略的概括一下吧:TP在从接受到HTTP请求到最终将视图输出,期间经历的很多步骤,这些步骤大家可以在http://document.th ...

  5. 【Solr】索引库查询界面详解

    目录 索引库查询界面详解 回到顶部 索引库查询界面详解 q:主查询条件.完全支持lucene语法.还进行了扩展. fq:过滤查询.是在主查询条件查询结果的基础上进行过滤.例如:product_pric ...

  6. Java并发包源码学习之AQS框架(四)AbstractQueuedSynchronizer源码分析

    经过前面几篇文章的铺垫,今天我们终于要看看AQS的庐山真面目了,建议第一次看AbstractQueuedSynchronizer 类源码的朋友可以先看下我前面几篇文章: <Java并发包源码学习 ...

  7. 微信电脑版真的要来了 微信Windows版客户端1.0 Alpha推出

    微信电脑版的搜索量一直很大,但只有网页版,之前也写了微信网页版APP - 网页微信客户端电脑版体验,在键盘上打字的感觉就是快.现在微信Windows版客户端1.0 Alpha推出了,来一睹芳容吧(20 ...

  8. 大数据之pig 命令

    1.pig与hive的区别 pig和hive比较类似的,都是类sql的语言,底层都是依赖于hadoop    走的mapreduce任务.    pig和hive的区别就是,想要实现一个业务逻辑的话, ...

  9. appid 评价

    //apple api #define kAppAppleId         @"980883989" #define kAppRateUrl         @"it ...

  10. php 正则表达式的使用

    要点:php正则表达式要用双引号,且要用“/ /”斜线做开始结束. 1.preg_match . preg_match_all 两者的区别:第一次匹配成功后就会停止匹配,如果要实现全部结果的匹配,即搜 ...