• 纪中10日T1 2313. 动态仙人掌


    纪中10日 2313. 动态仙人掌 

    (File IO): input:dinosaur.in output:dinosaur.out

    时间限制: 1500 ms  空间限制: 524288 KB  具体限制  

    Goto ProblemSet

    题目描述

    沙雕游戏……反正我没玩过……

    输入

    输出

    样例输入

    数据范围限制

    Solution

    考试时想的是对的

    为什么就是没有分呢?

    首先看看仙人掌有几种情况

    situation1

    两个比较分开的仙人掌……

    小恐龙按照这样走(跳),并没有什么特殊操作。这时的最高高度是两个仙人掌中最高的高度。

    situation2

    两个靠的比较近的仙人掌……

    先看第一个,为了高度尽量小,当然选择擦边跳了

     

    但是恐龙只有落地才能跳呀……要是它跳完第一个就落地,再起跳,一定会装上第二个仙人掌的!

    所以它只能一次性的跳过两个仙人掌……

    求最高点:

    设第一个的高度为a,第二个的高度为b,两个之间的距离为c;

    标点

    解:

    因为△ABC是直角等腰三角形

    所以AD=DC=a

    同理可得:

    EG=FG=b

    所以AF=AD+DG+GF=a+b+c

    延长AB,EF,交于H点

    △AHF亦为直角等腰三角形

    所以AH=HF=AF/2=(a+b+c)/2

    那么就可以把两个仙人掌合成一个更高的了

    Code

    #include<iostream>//不想OI一场空,千万别用万能头
    #include<algorithm>//快排sort()
    #include<cstdio>//能不用cin就不用
    #include<cstring>
    #include<map>
    #include<vector>
    #define IL inline
    using namespace std;
    IL void fin(){freopen("dinosaur.in","r",stdin);}
    IL void fout(){freopen("dinosaur.out","w",stdout);}
    IL void fio()
    {
        fin();
        fout();
    }
    
    struct node{
        double p;
        double h;
    }din[100000];
    bool cmp(node ta,node tb)
    {
        return ta.p<tb.p;
    }
    int n,tp,th,maxn;
    double ans=-1;
    int main()
    {
    //    fio();
        cin>>n;
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&tp,&th);
            din[i].p=tp;
            din[i].h=th;
            ans=max(ans,(double)din[i].h);
            if(din[i].p-din[i].h<0){
                cout<<"-1
    ";
                return 0;
            }
        }
        sort(din,din+n,cmp);
        int a,b,c;
        for(int i=0;i<n-1;i++)
        {
            c=din[i+1].p+din[i].p;
            a=din[i].h;
            b=din[i+1].h; 
            if(c>=a+b)
            {
                ans=max(ans,(double)max(a,b));
            }
            else
            {
                ans=max(ans,(a+b+c)/2.0);
                din[i+1].p=(a+din[i].p+din[i+1].p-b)/2.0;
                din[i+1].h=(a+b+c)/2.0;
            } 
        }
        printf("%.1lf",ans);
        return 0;
    }

    Code std

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    struct cly
    {
        int longn,left,right;
    }a[300100];
    double ans;
    int n,p[300100],h[300100],l,r,i;
    bool cmd(cly x,cly y)
    {
        return x.left<y.left;
    }
    int main()
    {
    //    freopen("dinosaur.in","r",stdin);
    //    freopen("dinosaur.out","w",stdout);
        cin>>n;
        for(i=1;i<=n;i++)
        {
            scanf("%d%d",p+i,h+i);
            a[i]=(cly){h[i],p[i]-h[i],p[i]+h[i]};
        }
        sort(a+1,a+1+n,cmd);
        if(a[1].left<0)
        {
            cout<<"-1";
            return 0;
        }
        l=a[1].left;
        r=a[1].right;
        i=1;
        while(i<n)
        {
            if(r<=a[i+1].left)
            {
                ans=max(ans,1.0*(r-l)/2);
                i++;
                l=a[i].left;
                r=a[i].right;
            }
            else if(r>=a[i+1].right)
            {
                i++;
            }
            else
            {
                i++;
                r=a[i].right;
            }
        }
        ans=max(ans,1.0*(r-l)/2);
        printf("%.1lf",ans);
        return 0;
    }
  • 相关阅读:
    spring aop
    spring Mybatis集成
    springDao的jdbctemplate
    spark介绍4(sparksql)ODBC(Windows)gc
    ssm集合的配置
    scala文件流操作,生成sparkpv,uv作业文件
    java数据库操作
    vue一键打包部署
    Vue 那些事
    CDN合集
  • 原文地址:https://www.cnblogs.com/send-off-a-friend/p/11359021.html
Copyright © 2020-2023  润新知