CFGym 100803DSpace Golf+物理(数学)计算

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

给出起点,终点,和n个柱子,小球最多可以在中间弹跳b次。(不算起点,终点),问最小的初速度。
解法:枚举落地次数。
解法类似于http://blog.csdn.net/xtulollipop/article/details/52789712。。
先判断最小速度能不能到达。不能大话他肯定与某个柱子相切。枚举柱子,找到一个能让所有柱子都不相撞的函数。。取最小值。。

#include<bits/stdc++.h>
using namespace std;
#define eps 1e-8
struct ZHU{
    long double wz,hi;
    long double newwz;
}zhu[11];
long double d,n,b;

bool judge(long double k,long double jian){
    for(int i=1;i<=n;i++){
        long double temp=k*(zhu[i].newwz)*(zhu[i].newwz-jian);
        //cout<<temp<<endl;
        if(temp-zhu[i].hi<-eps) return false;
    }
    return true;
}
int main(){
    while(cin>>d>>n>>b){
        for(int i=1;i<=n;i++) cin>>zhu[i].wz>>zhu[i].hi;
        long double ans=1e20;
        for(int i=1;i<=b+1;i++){
            long double jian=d/i;
            for(int j=1;j<=n;j++){
                zhu[j].newwz=zhu[j].wz;
                while(zhu[j].newwz-jian>0) zhu[j].newwz-=jian;
            }
            for(int j=0;j<=n;j++){
                long double k;
                if(j==0) k=-1.0/jian;
                else k=zhu[j].hi/(zhu[j].newwz)/(zhu[j].newwz-jian);

                if(judge(k,jian)==true){
                    long double vy=jian*sqrt(-k/2.0);
                    long double vx=jian/2.0/vy;
                    ans=min(ans,sqrt(vx*vx+vy*vy));
                }
            }
        }
        //printf("%.5Lf\n",ans);
        cout<<fixed<<setprecision(8)<<ans<<endl;
    }
    return 0;
}

/*
100 1 0
50 100

10 1 0
4 2

100 4 3
20 10
30 10
40 10
50 10

343 3 2
56 42
190 27
286 34



14.57738
3.16228
7.78175
11.08710
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值