南阳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 }        

 

posted @ 2017-07-29 18:28  Posase  阅读(202)  评论(0编辑  收藏  举报