PAT1054

来源:互联网 发布:电脑什么拍照软件 编辑:程序博客网 时间:2024/06/05 11:23

好久没有写代码了。因为要考研,看到进入复试有个机试,就想着平时没事也做做题目吧。这不做不知道一做吓一跳啊。一个简单的排序都能调试半天。还好经过几天的努力,终于正确提交了一道题目。用到了一点点哈希。

题目链接: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;elsetmp = 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;}


 

0 0
原创粉丝点击