PAT1054

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

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


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值