7 条题解
-
1
就不再考虑优化了,随便贴出来吧,一个比较麻烦的方法,不过这个解法就算是把测试点继续强化也不怕了
using namespace std; int u=0,n,a[131452],b,c,m,cot=0,maxn,mina[1000],maxa[1000],p=1145141,mi[10000],cache,ma[10000]; int main() { cin>>n; for(int i=0; i<n; i++) { cin>>b>>c; if(b<p) p=b; if(c>maxn) maxn=c; for(int j=b+1000; j<=c+1000; j++) a[j]=1; mi[i]=b+1000,ma[i]=c+1000; } for(int i=p+1000; i<=maxn+1000; i++) { if(a[i]==0) cache++; int iq=-1132,iw=-54154,ip=0; for(int j=0; j<n; j++) { if(mi[j]==i) iq=mi[j]; if(ma[j]<i&&ma[j]>iw) iw=ma[j],u=j; } for(int j=0; j<n; j++) { if((mi[j]<i&&ma[j]>=i)||(mi[j]<=i&&ma[j]>i)) ip=1; } if(a[i]!=0&&a[i-1]==1) { ip=0; for(int j=0; j<n; j++) { if((mi[j]<mi[u]&&ma[j]>=ma[u])||(mi[j]<=mi[u]&&ma[j]>ma[u])) { ip=1; break; } } if(i-1==iw&&i==iq&&ip==0) { maxa[cot]-=cache; cache=0,cot++,mina[cot]=i-1000; } } else if((a[i]!=0&&a[i-1]==0)) { bool rtx=false; for(int o=0; o<n; o++) if(i>=mi[o]&&i<=ma[o]) rtx=true; if(rtx==true) { maxa[cot]-=cache; cache=0; cot++; if((a[i]!=0&&a[i-1]==0)||(a[i]!=0&&i==p+1000)) mina[cot]=i-1000; } } if(maxa[cot]<i) maxa[cot]=i-1000; } cout<<cot<<endl; for(int i=1; i<=cot; i++) cout<<mina[i]<<" "<<maxa[i]<<endl; return 0; }
信息
- ID
- 735
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 902
- 已通过
- 124
- 上传者