zoj1715

来源:互联网 发布:python矩阵转化为列表 编辑:程序博客网 时间:2024/05/29 14:40

 恩,这道题虽然花的时间长了些,主要是浪费在细节上了,代码中,数组b用来存放所有出现过的天数,数组c用来存放数组b中每一种天数出现的次数,并且两数组一一对应,所以在函数sort中进行的排序过程中,两个同步调移动,以此来保证两数组的一一对应关系不变,其他的也就没什么了,以我现在的水平刷这道水题,暂时只想起了这种笨方法,以后再提高吧

#include<stdio.h>int xx(int x,int a[102],int top){    int i,k=-1;    for(i=0;i<top;i++)      if(x==a[i])      {        k=i;        break;      }    return k;}  void sort(int b[],int c[],int top)//排序 {     int i,j,k;     for(i=0;i<top-1;i++)       for(j=i+1;j<top;j++)         if(b[i]>b[j])         {            k=b[i];            b[i]=b[j];            b[j]=k;                                 k=c[i];            c[i]=c[j];            c[j]=k;         }}int main(){    int i,j,n,q,top,ttt,a[52][102],b[102],c[102],zeo=0;    scanf("%d%d",&n,&q);    while(!(n==0&&q==0))    {        top=0;        b[0]=0;        for(i=0;i<102;i++)           c[i]=1;                                for(i=0;i<n;i++)             //数据输入         {           scanf("%d",&a[i][0]);           for(j=1;j<=a[i][0];j++)             scanf("%d",&a[i][j]);        }                       for(i=0;i<n;i++)          for(j=1;j<=a[i][0];j++)          {            if(xx(a[i][j],b,top)==-1)//将出现过的天数放入数组b               b[top++]=a[i][j];            else              c[xx(a[i][j],b,top)]++;  //将b中各天数出现过的次数放入c,并保持b与c的一一对应                         }                          sort(b,c,top);        ttt=0;        for(i=1;i<top;i++)          if(c[i]>c[ttt])            ttt=i;                    if(c[ttt]>=q)           printf("%d\n",b[ttt]);        else          printf("%d\n",zeo);                      scanf("%d%d",&n,&q);    }         return 0;}