2 해설

  • 1
    @ 2026-4-28 18:41:01
    #include<bits/stdc++.h>
    using namespace std;
    int n,ans=1,l;//ans:几个数,l:当前区间右边界(其实叫r好一点,
    //ans=1是因为要给最后留下来的区间记一个数
    pair<int,int>a[1010];//pair,含有两个数的结构体
    int main()
    {
    	cin>>n;
    	for(int i=1;i<=n;i++)cin>>a[i].first>>a[i].second;
    	sort(a+1,a+n+1);//按区间左边界排序,越左边越容易和上一个合并
    	l=a[1].second;
    	for(int i=2;i<=n;i++)if(a[i].first>l)ans++,l=a[i].second;
        //有重合?合并,记一个数
    	cout<<ans;
    	return 0;
    }
    
    • @ 2026-4-28 19:04:35

      这么自私,必须踩

  • -4
    @ 2025-7-3 15:22:04

    #include<bits/stdc++.h> using namespace std; struct hd { int bg,ed; }a[10010]; void kp(int l,int r) { if(l>=r)return; int mid=a[(l+r)/2].ed,i=l-1,j=r+1; while(i<j) { do i++;while(a[i].ed<mid); do j--;while(a[j].ed>mid); if(i<j) { hd t=a[j];a[j]=a[i];a[i]=t; } } kp(l,j); kp(j+1,r); } int main() { int n,ans=1,last=1; cin>>n; for(int i=1;i<=n;i++) { cin>>a[i].bg>>a[i].ed; } kp(1,n); for(int i=2;i<=n;i++) { if(a[i].bg>a[last].ed) { ans++; last=i; } } cout<<ans; return 0; }

    • 1

    정보

    ID
    103
    시간
    1000ms
    메모리
    256MiB
    난이도
    5
    태그
    (N/A)
    제출 기록
    183
    맞았습니다.
    65
    아이디