Jizhong 10 T1 2313 동적 선인장

Jizhong 10, 2313 동적 선인장 

(파일 IO) : 입력 : dinosaur.in 출력 : dinosaur.out

시간 제한 :  1500 개 MS 공간 제약 :  524,288킬로바이트 특정 제한  

고토 ProblemSet

제목 설명

모래 조각 어쨌든, 나는 게임을하지 않은 ... ...

기입

수출

샘플 입력

데이터 범위 제한

해결책

나는 시험 잘 생각

왜 분리되지 않는 이유는 무엇입니까?

선인장 여러 상황에서 첫보기

situation1

두 개의 선인장의 비교 ......

같은 작은 공룡 이동 (점프), 및 특별한 동작에 따르면. 이 시간, 최대 높이 두 선인장 가장 높은 수준이다.

situation2

두 최근 선인장은 ......에 의존

주문 높이 가능한 한 작은 첫 번째 모습은 물론, 방목 뛰어 선택

 

이 착륙의 첫 번째 통해 춤 경우 그러나 공룡 만 ...... 춤 떨어질 수, 이륙, 다시 두 번째 선인장에 설치됩니다!

그래서 한 번만이 선인장을 건너 뛰려면 ......

가장 높은 포인트를 원하는 상대 :

두개의 C의 제 1 높이, 높이, B 사이의 제 2 거리를 설정하는 단계;

구두

해결 방법 :

ABC가 이등변 삼각형 △ 오른쪽 보낸

따라서 AD는 = DC는 = A

이와 유사하게 사용할 수 :

EG = B = FG

따라서 AF = AD + DG + GF = A + B + C

확장 AB, EF는 H 점에서 교차

AHF △ 또한이 이등변 직각 삼각형

따라서 AH = HF = AF / 2 = (A + B + C) / 2

그래서 우리는 더 높은 중 하나에 두 개의 선인장을 넣을 수 있습니다

암호

#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;
}

 

추천

출처www.cnblogs.com/send-off-a-friend/p/11359021.html