区间选点问题
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 }
作者:火星十一郎
本文版权归作者火星十一郎所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.