纪中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\n";
            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;
}

原文地址:https://www.cnblogs.com/send-off-a-friend/p/11359021.html

时间: 2024-10-05 23:10:25

纪中10日T1 2313. 动态仙人掌的相关文章

纪中10日T1 2300. 【noip普及组第一题】模板题

2300. [noip普及组第一题]模板题 (File IO): input:template.in output:template.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 题目描述 输入 输出 样例输入 样例输出 数据范围限制 朴素算法 考试开始的前一个小时我一直在折腾朴素算法 -> 对拍 1 #pragma GCC optimize(2) 2 #include<bits/stdc++.h> 3 #define IL inline 4 usin

纪中17日T1 2321. 方程

纪中17日T1 2321. 方程 (File IO): input:cti.in output:cti.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 Goto ProblemSet 题目描述 输入 输出 样例输入 样例输出 数据范围限制 提示 吐槽 这些图片太模糊了吧…… 还有那吓人的 mod 998244353 都使得我们对这道题的恐惧感叠加了998244353层…… 没想到……只有三种答案!(三进制呵呵哒) Solution (约定:用line[i]表示第

纪中10日T3 2296. 神殿 bfs

原文地址:https://www.cnblogs.com/send-off-a-friend/p/11330414.html

纪中23日c组T3 2161. 【2017.7.11普及】围攻

2161. 围攻 (File IO): input:siege.in output:siege.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 Goto ProblemSet 题目描述 经过刘邦的严密缉查,项羽的位置也就水落石出了.刘邦便趁机集合军队,进行对项羽的围攻.为了增加胜率,张良研究出一种全新的战法,目的就是一举打败难缠的项羽.  这种军队共有N个单位,一个接着一个排成一排,每个单位可以是士兵,或者是战车,这样的组合可以爆发出意想不到的强大战斗力:但有一

纪中5日T3 1566. 幸运锁(lucky.pas/c/cpp)

1566. 幸运锁(lucky.pas/c/cpp) 题目描述 有一把幸运锁,打开它将会给你带来好运,但开锁时需要输入一个正整数(没有前导0).幸运锁有一种运算,对于一个正整数,返回他的相邻两位数字间的差,如1135,运算结果为22(会去掉前导0). 现在已知只有经过反复运算最终结果为7的数才能打开这把锁,给你一个区间[a,b],问该区间中有多少个能打开幸运锁的幸运数. 输入 第一行两个整数a,b. 输出 一个整数K,表示共有多少个这样的数. 样例输入 1 10 样例输出 1 数据范围限制 [限

纪中20日c组T2 2122. 【2016-12-31普及组模拟】幸运票

2122. 幸运票 (File IO): input:tickets.in output:tickets.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 Goto ProblemSet 题目描述 给你一个数N(1<=N<=50),每张票有2N位,同时给你这2N位上的和S,如果这张票的前N位的和等于后N位的和,那我们称这张票是吉祥的,每一位可以取0-9. 你的任务是计算吉祥票的总数. 输入 输入N和S,S是所以位上的和,假设S<=1000 输出 输出吉祥票

纪中……结束了……

纪中25日 纪中二十多天的生活,就这样结束了. 带着没有离开c组的遗憾,结束了. 算是日久生情吧,中山纪念学校,于我而言,已经成为了一段无法忘记的记忆. 但是……仅仅只能一遍又一遍的回忆了. 科学馆三层楼的机房,是我们一起学习的地方,有说笑,有模拟赛:有爆零,有AK. 最重要的还是,大家都在一起,有陪伴吧. 同来望月人何处,风影依稀似去年. 原文地址:https://www.cnblogs.com/send-off-a-friend/p/11407424.html

截止9月10日苹果审核指南中文版

苹果在9月3日对App Store审核指南进行了重大更新,新加入了扩展.HealthKit.HomeKit以及TestFlight相关内容.另外,在9月10日新品公布会之后,苹果再次更新了App Store审核指南,加入Apple Pay相关内容.文中红色部分是相对于此前版本号的新增内容,蓝色部分表示苹果相关官方文档的链接. App Store Review Guidelines(英文版). 前言感谢您付出宝贵的才华与时间来开发iOS应用程程序.从职业与酬劳的角度而言,这对于成千上万的开发员来说

将Excel导入DataGridView 中的"select * from [Sheet1$]"中[ ]里面表单名的动态获取

Sheet1$是Excel默认的第一个表名,如果改动:select * from [Sheet1$]"将查询失败,因此应根据选择自动获取excel表名: 1 OpenFileDialog ofd = new OpenFileDialog(); //选择文件路径 2 ofd.Title = "Excel文件"; 3 ofd.FileName = ""; 4 ofd.Filter = "Excel文件(*.xls)| *.xls"; 5 s