题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428
先按开始时间排序,可以想象有一些教室(vector),然后有新活动举行,遍历vector看是否有教室活动结束,该教室活动结束就在这个教室举行活动,没有就新开教室举行活动,即vector push_back该活动,最后输出vector.size()就行了。
#include<iostream> #include<algorithm> #include<vector> using namespace std; struct t { int l,r; }a[ 10000]; bool cmp(t x,t y) { return x.l<y.l; } int main() { int n; vector<t>vec; cin>>n; for(int i=0;i<n;i++) cin>>a[i].l>>a[i].r; sort(a,a+n,cmp); vec.push_back(a[0]); for(int i=1;i<n;i++) { bool flag=true; for(int j=0;j<vec.size();j++) if(a[i].l>=vec[j].r) { vec[j].l=a[i].l; vec[j].r=a[i].r; flag=false; break; } if(flag) vec.push_back(a[i]); } cout<<vec.size(); return 0; }