hdu 2600 War

来源:互联网 发布:中国网络十大禁书 编辑:程序博客网 时间:2024/06/08 11:36

http://acm.hdu.edu.cn/showproblem.php?pid=2600

题意:要求找出不发生战争的最后一年

分析:按照x,y都最大排序,即:从最大的区间开始查找战争年间是否有断层

注意:每一年是独立的,即离散的,不连续;其他细节见代码

如下图:1)第一种情况,区间长度不变

                2)第二种情况,出现断层,即最后不发生战争的时间是Xn - 1

                3)第三种情况,改变区间长度


#include <iostream>#include <cstdio>#include <algorithm>using namespace std;struct War{    int x,y;}war[105];bool comp(struct War A,struct War B){    if(A.y>B.y) return 1;    else    {        if(A.y==B.y)        {            if(A.x>B.x) return 1;            else return 0;        }        else return 0;    }}int main(){    char str[105];    int n,t1,t2,i,x,y;    while(scanf("%d",&n)!=EOF)    {        scanf("%d%d",&t1,&t2);        for(i=0;i<n;i++)        {            scanf("%d%d",&x,&y);            gets(str);            if(x>y) swap(x,y);            war[i].x=x,war[i].y=y;        }        sort(war,war+n,comp);  //从较晚的战争年开始查找        x=war[0].x,y=war[0].y;        if(y<t2)        {            printf("%d\n",t2);  //printf("%d\n",y+1);  //直接输出最后一年            continue;        }                for(i=1;i<n;i++)  //是否能覆盖整个区间        {            if(war[i].y+1>=x&&war[i].x<x)                x=war[i].x;            else if(war[i].y+1<x)            {                printf("%d\n",x-1); //区间有断层                break;            }        }        if(x==t1&&y==t2)            printf("Badly!\n");    }    return 0;}