2 해설
-
1
#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; } -
-4
#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
- 아이디