nyoj 236

来源:互联网 发布:知我药妆 编辑:程序博客网 时间:2024/04/27 23:17

法一:

#include <stdio.h>#include <stdlib.h>struct time{int x,y;}ti[5001];int cmp(const void *a,const void *b){struct time*c=(struct time *)a;struct time*d=(struct time *)b;if(c->x!=d->x)  return c->x-d->x;else  return c->y-d->y;}int main(){int N;scanf("%d",&N);while(N--){int n,i,j,sum=0;int b[5001]={0};scanf("%d",&n);//memset(ti,0,sizeof(ti));for(i=0;i<n;i++)scanf("%d%d",&ti[i].x,&ti[i].y);qsort(ti,n,sizeof(ti[0]),cmp);for(i=0;i<n;i++)  for(j=0;j<i;j++)//注意此处是j>i目的是为了以x  //大小为排序 如果实在是不理解可以换成j<n;然后找一组数据试试     if(!b[j] && ti[i].y>=ti[j].y)    {    ti[j].x=ti[i].x;ti[j].y=ti[i].y;b[i]=1;//做标记break;     }for(i=0;i<n;i++)  if(!b[i])    sum++;printf("%d\n",sum);}return 0;}

法二:

#include <stdio.h>#include <stdlib.h>#define M 5000struct node{int l;int w;int f;};node s[M];int cmp(const void *a,const void *b){node *c=(node *)a;node *d=(node *)b;if(c->l!=d->l)return c->l-d->l;elsereturn c->w-d->w;}int main(){int T;scanf("%d",&T);while(T--){int n,i,j;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d %d",&s[i].l,&s[i].w);s[i].f=0;}qsort(s,n,sizeof(s[0]),cmp);int ans=0;for(i=0;i<n;i++){if(s[i].f==0){ans++;s[i].f=1;node q=s[i];for(j=i+1;j<n;j++){if(s[j].l>=q.l && s[j].w>=q.w && s[j].f!=1){q=s[j];s[j].f=1;}}}}printf("%d\n",ans);}return 0;}



0 0