南阳14----会场安排问题
1 //只需要按照结束时间排序贪心即可 2 #include <iostream> 3 #include <algorithm> 4 using namespace std; 5 typedef struct 6 { 7 int x,y; 8 }P; 9 P p[10005]; 10 bool cmp(P a,P b) 11 { 12 if(a.y < b.y) return true; 13 else if(a.y == b.y && a.x > b.x) return true; 14 return false; 15 } 16 int main() 17 { 18 int t,n; 19 cin >> t; 20 while(t--) 21 { 22 cin >> n; 23 for(int i=0; i<n; ++i) 24 cin >> p[i].x >> p[i].y; 25 sort(p,p+n,cmp); 26 int ans = 1,temp = p[0].y; 27 for(int i=1; i<n; ++i) 28 if(p[i].x > temp) 29 { 30 ++ans; 31 temp = p[i].y; 32 } 33 cout << ans << endl; 34 } 35 return 0; 36 }
1 //最优程序 2 #include<stdio.h> 3 #include <vector> 4 #include<algorithm> 5 #include<math.h> 6 using namespace std; 7 8 struct activ 9 { 10 int begin; 11 int end; 12 }; 13 bool cmp( activ a,activ b) 14 { 15 return a.end<b.end; 16 } 17 int main() 18 { 19 //freopen("1.txt","r",stdin); 20 int n; 21 scanf("%d",&n); 22 while (n--) 23 { 24 int m; 25 scanf("%d",&m); 26 vector<activ> vec; 27 for(int i=0;i<m;i++) 28 { 29 activ a; 30 scanf("%d%d",&a.begin,&a.end); 31 vec.push_back(a); 32 } 33 34 sort(vec.begin(),vec.end(),cmp); 35 int count=vec.size(); 36 int k=0; 37 for (int i=1;i<vec.size();i++) 38 { 39 if(vec[i].begin <= vec[k].end) 40 count--; 41 else k=i; 42 } 43 printf("%d\n",count); 44 } 45 46 return 0; 47 }