题目大意:
有n项工作,每项工作分别在si开始,ti结束。对每项工作,你都可以选择参加或不参加,但选择了参加某项工作就必须至始至终参加全程参与,即参与工作的时间段不能有重叠(即使开始的时间和结束的时间重叠都不行)。
限制条件:
1<=n<=100000
1<=si<=ti,=109
样例:
输入
n=5
s={1,2,4,6,8}
T={3,5,7,9,10}
输出
3(选择工作1, 3, 5)
解题思路:
在可选的工作中,每次选取结束时间最早的。
s[] t[]存储开始和结束时间
用pair数组存储n对时间对
最后根据逻辑写出相应代码
#include<iostream>
#include<algorithm>
using namespace std;
const int max_n=100001;
int n;
int s[max_n],t[max_n];
pair<int,int> a[max_n];
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>s[i];
}
for(int i=0;i<n;i++){
cin>>t[i];
}
for(int i=0;i<n;i++){
//a[i]=pair(t[i],s[i]);
a[i].first=t[i];
a[i].second=s[i];
}
sort(a,a+n);
/*for(int i=0;i<n;i++){
cout<<a[i].first<<","<<a[i].second<<endl;
}*/
int count=1,ctime=a[0].first;
//cout<<a[1].second<<endl;
for(int i=0;i<n;i++){
if (ctime < a[i+1].second){
count++;
ctime=a[i+1].first;
//cout<<"no."<<i<<endl;
}
}
cout<<count;
return 0;
}