区间选点问题

 1 /*
 2 先按右端点由小到大排序,相等的话左端点由大到小(否则会少算) 
 3 */
 4 #include <iostream>
 5 #include <cstdlib>
 6 #include <cstring>
 7 using namespace std;
 8 
 9 const int N = 10000;
10 /**下面的不会用 
11 typedef struct Node 
12 {
13     int a, b;
14     bool operator <  (const Node &node) const//此时使用sort排序 
15     {
16         return b<node.b || b==node.b&&a>node.a;
17     } 
18 };
19 Node q[N];
20 */
21 
22 typedef struct Node 
23 {
24     int a, b;
25 };
26 Node q[N];//不可直接把q[N]定义在typedef后边 
27 int cmp(const void *a, const void *b)
28 {
29     Node *c = (Node *)a;
30     Node *d = (Node *)b;
31     if(c->b == d->b)
32         return c->a < d->a;
33     return c->b > d->b;
34     
35 }
36 int cnt = 0;
37 
38 int main()
39 {
40     int i,j,k;
41     int T;
42     cin>>T;
43     int n;
44     while(T--)
45     {
46         memset(q,0,sizeof(q));
47         cin>>n;
48         for(i=0; i<n; i++)
49         {
50             cin>>q[i].a>>q[i].b;
51         }
52         qsort(q,n,sizeof(Node),cmp);
53         int end = -1;//坐标全是正数 
54         
55         for(i=0; i<n; i++)
56         {
57             if(end < q[i].a)
58             {
59                 end = q[i].b;
60                 cnt++;
61             }
62         }
63         cout<<cnt<<endl;
64     }
65     return 0;
66     
67 }

 

posted @ 2013-04-13 20:28  加拿大小哥哥  阅读(514)  评论(0编辑  收藏  举报