编号统计
时间限制:
2000 ms | 内存限制:
65535 KB
难度:
2
-
描述
- zyc最近比较无聊,于是他想去做一次无聊的统计一下。他把全校同学的地址都统计了一下(zyc都将地址转化成了编码),然后他希望知道那个地方的同学最多(如果同学最多的地方有多个,输出编号最小的一个)。
-
输入
-
第一行输入一个正整数T(0<T<=11)表示有T组测试数据
每组测试数据第一行输入一个正整数N(0<N<200000)表示有N个编号,随后输入N个编码(编码由数字组成且少于十位)
输出
- 每组数据输出占一行输出出现次数最多的编号 样例输入
-
1 5 12345 456 45 78 78
样例输出
-
78
1 //2011-11-27 :代码一:超时代码 2 /* 3 #include<stdio.h> 4 #include<malloc.h> 5 typedef struct 6 { 7 int site;//地址编号 8 int num;//该地址下人数 9 }stu; 10 int main() 11 { 12 int t,i,j,n; 13 stu *a,max; 14 scanf("%d",&t); 15 while(t--) 16 { 17 scanf("%d",&n); 18 a=(stu*)malloc(n*sizeof(stu)); 19 for(i=0;i<n;++i) 20 { 21 a[i].num=1; 22 scanf("%d",&a[i].site); 23 for(j=0;j<i;++j) 24 { 25 if(a[j].site==a[i].site) 26 { 27 ++a[j].num; 28 --i; 29 --n; 30 break; 31 } 32 } 33 } 34 for(i=0;i<n;++i) 35 { 36 if(!i) 37 { 38 max=a[0]; 39 continue; 40 } 41 if(max.num<a[i].num) 42 max=a[i]; 43 else if(max.num==a[i].num) 44 max=max.site<a[i].site?max:a[i]; 45 } 46 printf("%d\n",max.site); 47 free(a); 48 } 49 return 0; 50 } 51 */ 52 53 /* 54 //代码二:-----字典树(超时依旧) 55 #include<cstdio> 56 #include<cstring> 57 58 struct tree 59 { 60 int sum; 61 struct tree *next[10]; 62 }; 63 int max; 64 char num[15]; 65 66 void insert(char *s,tree *T) 67 { 68 tree *p,*q; 69 int i,j,id; 70 p=T; 71 i=0; 72 while(s[i]) 73 { 74 id=s[i]-'0'; 75 if(p->next[id]==NULL) 76 { 77 q=new tree; 78 q->sum=0; 79 for(j=0;j<10;++j) 80 q->next[j]=NULL; 81 p->next[id]=q; 82 } 83 p=p->next[id]; 84 ++i; 85 } 86 p->sum++; 87 if(p->sum>max) 88 { 89 max=p->sum; 90 strcpy(num,s); 91 } 92 } 93 94 int main() 95 { 96 int m,i,n; 97 char s[15]; 98 tree *T; 99 scanf("%d",&m); 100 while(m--) 101 { 102 T=new tree; 103 T->sum=0; 104 for(i=0;i<10;++i) 105 T->next[i]=NULL; 106 scanf("%d",&n); 107 max=0; 108 while(n--) 109 { 110 scanf("%s",s); 111 insert(s,T); 112 } 113 printf("%s\n",num); 114 } 115 return 0; 116 } 117 118 */ 119 120 //代码三:----人就容易手定向思维的影响---本题排序后直接求最长平台即可 121 #include<cstdio> 122 #include<algorithm> 123 using namespace std; 124 125 int main() 126 { 127 int T,n,i,k,max,count; 128 int *num; 129 scanf("%d",&T); 130 while(T--) 131 { 132 scanf("%d",&n); 133 num=new int[n]; 134 for(i=0;i<n;++i) 135 scanf("%d",&num[i]); 136 sort(num,num+n); 137 max=0; 138 count=1; 139 for(i=1;i<n;++i) 140 { 141 while(num[i]==num[i-1]) 142 { 143 ++count; 144 ++i; 145 } 146 if(max<count) 147 { 148 max=count; 149 k=num[i-1]; 150 } 151 count=1; 152 } 153 printf("%d\n",k); 154 } 155 return 0; 156 }