7 条题解
-
1
#include
#include
#include
using namespace std;
int main() {
int n; cin >> n; vector<vector<int>> v; for(int i=0; i<n; i++){ int a, b; cin >> a >> b; v.push_back({a, b}); } sort(v.begin(), v.end()); vector<vector<int>> ans; int start = v[0][0], end = v[0][1]; for(int i=1; i<n; i++){ if(v[i][0] <= end){ if(v[i][1] > end) end = v[i][1]; } else { ans.push_back({start, end}); start = v[i][0]; end = v[i][1]; } } ans.push_back({start, end}); cout << ans.size() << endl; for(auto x: ans){ cout << x[0] << " " << x[1] << endl; } return 0;
}
-
1
#include <bits/stdc++.h> using namespace std; const int Maxn=5010; struct Node{ int x,y; }a[Maxn]; int n,cnt=0,last; bool cmp(const Node & t1,const Node & t2){ return t1.x<t2.x; } int main() { cin>>n; for(int i=1;i<=n;i++){ cin>>a[i].x; cin>>a[i].y; } sort(a+1,a+n+1,cmp); last=a[1].y; cnt+=1; for(int i=2;i<=n;i++){ if(a[i].x<=last){ last=max(last,a[i].y); }else{ a[cnt].y=last; last=a[i].y; cnt+=1; a[cnt].x=a[i].x;} } a[cnt].y=last; cout<<cnt<<endl; for(int i=1;i<=cnt;i++){ cout<<a[i].x<<" "<<a[i].y<<endl; } return 0; }
-
1
#include <bits/stdc++.h> using namespace std; const int Maxn=5010; struct Node{ int x,y; }a[Maxn]; int n,cnt=0,last; bool cmp(const Node & t1,const Node & t2){ return t1.x<t2.x;} int main() { cin>>n; for(int i=1;i<=n;i++){ cin>>a[i].x; cin>>a[i].y; } sort(a+1,a+n+1,cmp); last=a[1].y; cnt+=1; for(int i=2;i<=n;i++){ if(a[i].x<=last){ last=max(last,a[i].y); }else { a[cnt].y=last; last=a[i].y; cnt+=1; a[cnt].x=a[i].x; } } a[cnt].y=last; cout<<cnt<<endl; for(int i=1;i<=cnt;i++){ cout<<a[i].x<<" "<<a[i].y<<endl; } return 0; }
-
1
#include<bits/stdc++.h> using namespace std; int l[1000000],r[1000000],p[10000],n,L=-999,R=-9999,k,o=0,sum=1;int main() {cin>>n;for(int i=0; i<n; i++) cin>>l[i]>>r[i];for(int i=0; i<n-1; i++) {k=i;for(int j=i+1; j<n; j++) if(l[k]>l[j])k=j;if(k!=i) {swap(l[i],l[k]);swap(r[i],r[k]);}}L=l[0];R=r[0];for(int i=1; i<n; i++) {if(l[i]<=R)if(r[i]>R) {R=r[i];}if(l[i]>R) {sum++;p[++o]=L;p[++o]=R;L=l[i];R=r[i];}}o=1;cout<<sum<<endl;for(int i=1; i<sum; i++) {cout<<p[o]<<" "<<p[o+1]<<endl;o+=2;}cout<<L<<" "<<R;}
哇,居然只有三行!我就抄这个了!
-
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; }
-
1
#include<bits/stdc++.h> using namespace std; int l[1000000],r[1000000],p[10000]; int main() { int n,L=-999,R=-9999,k,o=0,sum=1; cin>>n; for(int i=0;i<n;i++) { cin>>l[i]>>r[i]; } for(int i=0;i<n-1;i++) { k=i; for(int j=i+1;j<n;j++) { if(l[k]>l[j])k=j; } if(k!=i) { swap(l[i],l[k]); swap(r[i],r[k]); } } L=l[0]; R=r[0]; for(int i=1;i<n;i++) { if(l[i]<=R) { if(r[i]>R) { R=r[i]; } } if(l[i]>R) { sum++; p[++o]=L; p[++o]=R; L=l[i]; R=r[i]; } } o=1; cout<<sum<<endl; for(int i=1;i<sum;i++) { cout<<p[o]<<" "<<p[o+1]<<endl; o+=2; } cout<<L<<" "<<R; }
-
0
#include <bits/stdc++.h> using namespace std; const int Maxn=5010; struct Node( int x,y; ); Node a[Maxn]; bool cmp(const Node &t1,const Node &t2){ return t1.x<t2.x; } int n,cnt=0,last=0; int main() { cin>>n; for(int i=1; i<=n;i++){ cout<<a[i].x<<a[i].y<<endl; } last=a[1].y; cnt=1; for(int i=2;i<=n;i++){ if (a[i].x<=last){ last=max(last,a[i].y); }else{ a[cnt].y=last; cin+=1; a[cnt].x=a[i].x; last=a[i].y } } a[cnt].y=last; cout<<cnt<<endl; for(int i=1;i<=cnt.i++){ cout<<a[i],x<<" "<<a[i].y<<endl; } return 0; }
- 1
信息
- ID
- 735
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 902
- 已通过
- 124
- 上传者