7 条题解

  • 1
    @ 2025-4-28 11:45:28

    #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
      @ 2025-4-21 9:58:24

      #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
        @ 2025-4-21 9:55:44

        #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
          @ 2022-7-17 18:05:27
          #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
          @ 2022-7-17 16:00:29

          就不再考虑优化了,随便贴出来吧,一个比较麻烦的方法,不过这个解法就算是把测试点继续强化也不怕了

          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
            @ 2022-7-17 15:55:05
            #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
              @ 2025-4-21 12:06:01

              #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
              上传者