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