cleaning shifts这道POJ2376题目困扰了半天
原因在于寻找当前最大时间+1左侧,右侧最大的时候,没有遍历后面的所有数据,所以导致疯狂地WA哭了
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cmath>
#include<cstring>
#include<map>
#include<set>
#include<stack>
#include<utility>
#include<queue>
#include<vector>
#include<cctype>
using namespace std;
#define fore(i,a,b) for(int i=a;i<=b;i++)
#define forb(i,a,b) for(int i=a;i>=b;i--)
#define fir first
#define sec second
#define ABS(a) ((a)>0?(a):-(a))
#define PI acos(-1,0)
typedef long long ll;
typedef long double ld;
const int MAXN=100005;
struct node{ int beg,end; }nums[MAXN];
bool cmp(node a,node b){
return a.beg<b.beg;
}
int main(){
int n,t;
cin>>n>>t;
fore(i,1,n) scanf("%d%d",&nums[i].beg,&nums[i].end);
sort(nums+1,nums+n+1,cmp);
//fore(i,1,n) printf("%d %d\n",nums[i].beg,nums[i].end);
int ans,now;
if(nums[1].beg==1){
now=nums[1].end,ans=1;
}else{
return cout<<-1,0;
}
fore(i,2,n){
//if(nums[i].beg==nums[i-1].beg) continue;
//if(nums[i].beg==nums[i].end) continue;
if(nums[i].beg<=now+1){
fore(j,i+1,n) if (nums[j].beg <= now + 1){
if(nums[j].end > nums[i].end) i=j;
}else break;
if(nums[i].end > now ) now = nums[i].end,ans++;
}else{
break;
}
if(now>=t) break;
}
printf("%d",now>=t?ans:-1);
return 0;
}