• hdu 4036 Rolling Hongshu


    hdu 4036 Rolling Hongshu

    题意:一个sweet potato想要去约会,从起点滚到终点,途经一个mountain,有m个峰顶,第一个峰顶,第m个峰顶分别为起点和终点,忽略摩擦力,在每一个斜坡上分布着bitter potatoes,每经过一个bitter potato,bitter potato就会以一定的初速度追赶sweet potato,问,sweet potato应该以最小多大的初速度滚动,保证不被bitter potato追到,完成约会;

    分析:根据能量守恒定律,首先,求出sweet potato到达每一个峰顶需要的最小速度,其次,求出sweet potato到达每一个bitter potato需要的最小速度,输出较大者即为所求;

    View Code
    #include<stdio.h>
    #include
    <math.h>
    #include
    <string.h>
    struct PEAK
    {
    double x,h;
    }p[
    1100];
    struct bit
    {
    double x,v;
    }pat[
    1100];
    int main()
    {
    int G=20;
    double h,weight;
    int t,cases=1,i,j,n,m,w;
    scanf(
    "%d",&t);
    while(t--)
    {
    double v0=0,temp;
    scanf(
    "%d%d%d",&n,&m,&w);
    for(i=1;i<=n;i++) //求出到达任意一个峰顶需要的最小速度
    {
    scanf(
    "%lf%lf",&p[i].x,&p[i].h);
    if(p[i].h-p[1].h<=0) //峰顶在起始点一下,初速度可以为零
    temp=0;
    else temp=sqrt(2*G*(p[i].h-p[1].h));
    if(temp>v0) v0=temp;
    }
    double vx,v=0;
    for(i=1;i<=m;i++) //根据能量守恒,求出到达每一个bitter potato需要的最小速度
    {
    scanf(
    "%lf%lf%lf",&pat[i].x,&pat[i].v,&weight);
    pat[i].x
    +=p[1].x; //将bitter potato的坐标改为相对于原点
    for(j=1;j<n;j++)
    {
    if(pat[i].x>=p[j].x&&pat[i].x<=p[j+1].x) //找出当前bitter potato所在的斜坡
    {
    h
    =(1.0*(p[j+1].h-p[j].h)/(p[j+1].x-p[j].x))*(pat[i].x-p[j].x) + p[j].h; //bitter potatoe相对于原点的高度
    break;
    }
    }
    vx
    =sqrt(1.0*pat[i].v*pat[i].v+1.0*2*G*(h-p[1].h)); //求出到达当前bitter potato需要的速度
    if(vx>v)
    v
    =vx;
    }
    if(v>v0)
    printf(
    "Case %d: %.2lf\n",cases++,v);
    else
    printf(
    "Case %d: %.2lf\n",cases++,v0);
    }
    return 0;
    }
  • 相关阅读:
    leetcode:Swap Nodes in Pairs
    leetcode:Coin Change
    leetcode:Odd Even Linked List
    算法的时间复杂度和空间复杂度
    linux学习之centos(三):网卡配置
    VMware虚拟机中的常用文件介绍
    leetcode:Partition List
    REST简析
    数据结构与算法之——五大查找
    Lepus经历收获杂谈(二)——QT
  • 原文地址:https://www.cnblogs.com/nanke/p/2174032.html
Copyright © 2020-2023  润新知