好久没有写代码了。因为要考研,看到进入复试有个机试,就想着平时没事也做做题目吧。这不做不知道一做吓一跳啊。一个简单的排序都能调试半天。还好经过几天的努力,终于正确提交了一道题目。用到了一点点哈希。
题目链接:http://pat.zju.edu.cn/contests/pat-a-practise/1054
题目的大概意思:
输入一堆数据。第一行M,N代表M行N列。然后直接输出里面最多的数据,而且题目保证最多的那个数据肯定超过所有数据的一半的个数。
不多说了,这种小程序直接上代码啊。
#include <stdio.h>
#include <string.h>
const int h1 = 1313, h2 = 231211;
int aa[250000];
int bb[250000];
int main()
{
int m, n, p;
int i, j, k, tmp, ans;
while(scanf("%d%d", &m, &n) != EOF)
{
memset(aa, 0, sizeof(aa));
memset(bb, -1, sizeof(bb));
if(m * n % 2 == 0)
tmp = m * n / 2;
else
tmp = m* n / 2 + 1;
for(i = 0; i < m; ++i)
for(j = 0; j < n; ++j)
{
scanf("%d", &k);
p = k % h2;
while(bb[p] > 0 && bb[p] != k)
p = (p + h1) % h2;
aa[p]++;
if(bb[p] < 0) bb[p] = k;
if(aa[p] >= tmp) ans = p;
}
printf("%d\n", ans);
}
return 0;
}