timus 1192. Ball in a Dream URAL 解题报告 平生第一个计算几何+高中物理

timus   1192. Ball in a Dream    URAL  解题报告   平生第一个计算几何+高中物理

看来高中物理没白学,这个题用我仅剩下的高中物理学知识分析下竟然找到了方法,再加上计算几何,其实也说不上计算结合题,无非就是利用了三角函数来做,终于AC掉了,虽然是个非常水的题目!但是仍然很高兴,以前碰到这种控制精度的题就头大啊!   好像不好做啊,好做不好AC啊,今天终于AC了……

题目大意:
 一个人做梦,梦到在一个飞机上,其实应该是一个非常大的没有尽头的平面,endless, 然后斜抛一个球,因为前面说是没有尽头的平面嘛,所以不可能是斜下抛……
既然是斜往上抛的话就有水平和向上的两个分量,这两个速度分量vx,vy;   关于vy,视为一个上抛运动,到最高点再下来时,竖直方向的能量没变,其实水平方向的也没变,在一次抛出到落地的时间为 t=2*vy/g;     因为竖直到最高点的时候速度为0,下降的时候是一个逆过程……   这一段s=vx*t=v*cosa*2*v*sina/g; 然后动能变为1/k  即v^2/=k……
然后看代码,为了保持精度直到v^2<EPS    就不要再算下去了

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
#include<cstdio>
#include<math.h>
#define EPS 1e-7
using namespace std;
const double pi=3.1415926535;
double v0,a,k;
double f(double v)
{///求一次运动之间的水平距离,下面的v实际是v^2
   return v*sin(a*pi/90.0)/10.0;
}

int main()
{
    cin>>v0>>a>>k;
    double ans=0,tmp=0;
    v0=v0*v0;
    while(1)
    {
        tmp=f(v0);
       // if(tmp<0.000000001) break;
        ans+=tmp;
        v0=v0/k;
        if(v0<=EPS)break;///注意这里,不能是0,因为不可能是0
    }
    printf("%.2f\n",ans+EPS);

}




下面是pascal代码,超短,是discuss里面的

var v,a,k:real;
begin
 readln(v,a,k);
 write(((v*v*k*sin(a*3.1415926535/90))/(10*(k-1))):0:2);
end.






timus   1192. Ball in a Dream    URAL  解题报告   平生第一个计算几何+高中物理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值