wooden sticks
这道题的思路是对木棍的长度排序,如果相同再按重量排序,从小到大。
这题不知道为什么,我用qsort排序是wrong answer ..一用sort排序时,就AC啦。。
View Code
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 #include<algorithm>
5 using namespace std;
6 struct node
7 {
8 int l;
9 int w;
10 }T[5010];
11 bool cmp(node a,node b)
12 {
13 if(a.l!=b.l)
14 return a.l<b.l;
15 return a.w<b.w;
16 }
17 int main( )
18 {
19 int N,M;
20 scanf("%d",&N);
21 while(N--)
22 {
23 int i,j,k,m,n,visit[5010],temp,t=0;
24 memset(visit,0,sizeof(visit));
25 scanf("%d",&M);
26 for(i=0;i<M;i++)
27 scanf("%d%d",&T[i].l,&T[i].w);
28 sort(T,T+M,cmp);
29 for(i=0;i<M;i++)
30
31 if(visit[i]==0)
32 {
33 temp=T[i].w;
34 for(j=i+1;j<M;j++)
35 {
36 if(visit[j]==0&&T[j].w>=temp)
37 {
38 visit[j]=1;
39 temp=T[j].w;
40 }
41 }
42 t++;
43 }
44 printf("%d\n",t);
45 }
46 return 0;
47 }
View Code
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 #include<algorithm>
5 using namespace std;
6 struct node
7 {
8 int l;
9 int w;
10 }T[5010];
11
12 int cmp(const void *a,const void *b)
13 {
14 if( (*(node *)a).l != (*(node *)b).l )
15 return (*(node *)a).l < (*(node *)b).l;
16 else
17 return (*(node *)a).w < (*(node *)b).w;
18 }
19 /*
20 bool cmp(node a,node b)
21 {
22 if(a.l!=b.l)
23 return a.l<b.l;
24 return a.w<b.w;
25 }
26 */
27 int main( )
28 {
29 int N;
30 scanf("%d",&N);
31 while(N--)
32 {
33 int M,j,i,k,visit[5010],t=0,temp;
34 memset(visit,0,sizeof(visit));
35 scanf("%d",&M);
36 for(i=0;i<M;i++)
37 {
38 scanf("%d%d",&T[i].l,&T[i].w);
39 }
40 qsort(T,M,sizeof(T[0]),cmp);
41 //sort(T,T+M,cmp);
42 for(i=0;i<M;i++)
43 if(visit[i]==0)
44 {
45 temp=T[i].w;
46 visit[i]=1;
47 for(j=i+1;j<M;j++)
48 if(visit[j]==0&&T[j].w>=temp)
49 {
50 temp=T[j].w;
51 visit[j]=1;
52
53 }
54 t++;
55 }
56 printf("%d\n",t);
57 }
58 return 0;
59 }
60
posted on 2011-04-24 22:41 more think, more gains 阅读(197) 评论(0) 编辑 收藏 举报