Poj1065
#include<stdio.h>
#include<stdlib.h>
struct g
{
int l;
int w;
bool t;
}sticks[2505];
int cmp(const void *a,const void *b)
{
struct g *c=(g *)a;
struct g *d=(g *)b;
if(c->l!=d->l)
return c->l-d->l;
else
return c->w-d->w;
}
int main()
{
int i,j,t,n;
int ans,temp;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
sticks[i].t=false;
scanf("%d%d",&sticks[i].l,&sticks[i].w);
}
qsort(sticks,n,sizeof(sticks[0]),cmp);
ans=0;
for(i=0;i<n;i++)
{
if(sticks[i].t==false)//未访问过
{
ans++;//随着i的变化,每一次把符合条件的都覆盖了
temp=sticks[i].w;
sticks[i].t=true;//
for(j=i+1;j<n;j++)
{
if(sticks[j].t==false&&sticks[j].w>=temp)
{
sticks[j].t=true;
temp=sticks[j].w;
}
}
}
}
printf("%d\n",ans);
}
return 0;
}
个人还是有点不太理解为什么是:把L作为第一关键字,W作为第二关键字进行排序,然后再进行覆盖求ans就行。。。。
求指教。。。
keep moving...

浙公网安备 33010602011771号