注解
1、本题有一个大坑,但是仔细读题就是可以避免的:输入的战争名字中可能带空格!因此输入的时候,前面的数字用的是cin,而后面的名字必须用getline,否则就是Wrong Answer。
2、主要思路:结构体排序,先按结尾时间,再按开始时间。如果最大的结束时间还比q小,那就直接输出q。否则,初始解是w[0]的start-1。然后依次往下遍历,如果w[i].s>=w[i-1].e+1,那么此时的最大值就会变成w[i].s-1。如果最终最大值比p还小,那显然就是不合理的解,也就是输出Badly!
代码
#include <iostream>
#include <algorithm>
using namespace std;
struct War {
int s;
int e;
};
int compare(War w1, War w2) {
if(w1.e==w2.e) {
return w1.e<w2.e;
} else {
return w1.s<w2.s;
}
}
int main() {
int N;
while(cin>>N) {
War w[N];
int p, q;
cin>>p>>q;
for(int i=0; i<N; i++) {
string name;
cin>>w[i].s>>w[i].e;
getline(cin, name);
}
sort(w, w+N, compare);
if(w[N-1].e<q) {
cout<<q<<endl;
} else {
int mmax = w[0].s-1;
for(int i=1; i<N; i++) {
if(w[i].s>=w[i-1].e+1){
mmax = w[i].s-1;
}
}
if(mmax<p){
cout<<"Badly!"<<endl;
}
else{
cout<<mmax<<endl;
}
}
}
return 0;
}