码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 4036 2011成都赛区网络赛F 模拟 **

时间:2015-08-06 00:05:37      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

为了确保能到达终点,我们需要满足下面两个条件

1.能够到达所有山顶

2.能够在遇到苦土豆时速度大于他

二者的速度可以用能量守恒定律做,苦土豆的坐标可通过三角形相似性来做

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
using namespace std;
#define MOD 1000000007
const int INF=0x3f3f3f3f;
const double eps=1e-5;
typedef long long ll;
#define cl(a) memset(a,0,sizeof(a))
#define ts printf("*****\n");
const int MAXN=1005;
int n,m,tt;
struct P
{
    double x,h;
}node1[MAXN];
struct PP
{
    double x,v;
}node2[MAXN];
int main()
{
    int i,j,k,w;
    double we,h;
    #ifndef ONLINE_JUDGE
    freopen("1.in","r",stdin);
    #endif
    scanf("%d",&tt);
    int ca=1;
    while(tt--)
    {
        double v0=0,temp;
        int g=20;
        scanf("%d%d%d",&n,&m,&w);
        for(i=1;i<=n;i++)
        {
            scanf("%lf%lf",&node1[i].x,&node1[i].h);
            temp=sqrt(2*g*(node1[i].h-node1[1].h));
            if(temp>v0) v0=temp;
        }
        double vx,v=0;
        for(i=1;i<=m;i++)
        {
            scanf("%lf%lf%lf",&node2[i].x,&node2[i].v,&we);
            node2[i].x+=node1[1].x;
            for(j=1;j<n;j++)
            {
                if(node2[i].x>=node1[j].x&&node2[i].x<=node1[j+1].x)
                {
                    h=(1.0*(node1[j+1].h-node1[j].h)/(node1[j+1].x-node1[j].x))*(node2[i].x-node1[j].x) + node1[j].h;  //bitter potatoe相对于原点的高度
                    break;
                }
            }
            vx=sqrt(1.0*node2[i].v*node2[i].v+1.0*2*g*(h-node1[1].h));
            if(vx>v)
                v=vx;
        }
        if(v>v0)
            printf("Case %d: %.2lf\n",ca++,v);
        else
            printf("Case %d: %.2lf\n",ca++,v0);
    }
}

 

hdu 4036 2011成都赛区网络赛F 模拟 **

标签:

原文地址:http://www.cnblogs.com/cnblogs321114287/p/4706034.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!