ZOJ-1523

坑爹模拟题,不知道是不是好多人懒的读题,提交的人好少。。题意就是给两个图,求合理点占全图的百分比,注意,图是可以旋转的!!!开始我题意没理解,看了半天,以为原位置匹配就行了,结果怎么算怎么不对。。加上旋转的情况后,提交还是WA,只好找出真实数据,原来还有翻转加旋转的情形!!!一共8种变换形式,不能漏掉。。真吐血啊,一道水题搞了这么久,擦。。

#include<stdio.h>
#include<string.h>

static int invalid(int a, int b)
{
	return a - b > 100 || a - b < -100;
}

int main()
{
	int map[400][400];
	int i, j, L;
	while (scanf("%d", &L), L)
	{
		int res[8], pix;
		memset(res, 0, sizeof(res));
		for (i = 0; i < L; i++)
			for (j = 0; j < L; j++)
				scanf("%d", &map[i][j]);
		for (i = 0; i < L; i++)
			for (j = 0; j < L; j++)
			{
				scanf("%d", &pix);
				if (invalid(pix, map[i][j]))
					res[0]++;
				if (invalid(pix, map[j][L - 1 - i]))
					res[1]++;
				if (invalid(pix, map[L - 1 - i][L - 1 - j]))
					res[2]++;
				if (invalid(pix, map[L - 1 - j][i]))
					res[3]++;
				if (invalid(pix, map[j][i]))
					res[4]++;
				if (invalid(pix, map[i][L - 1 - j]))
					res[5]++;
				if (invalid(pix, map[L - 1 - j][L - 1 - i]))
					res[6]++;
				if (invalid(pix, map[L - 1 - i][j]))
					res[7]++;
			}
		double total = L * L, temp, ans = -1;
		for (i = 0; i < 8; i++)
		{
			temp = (total - res[i]) / total;
			if (temp > ans)
				ans = temp;
		}
		printf("%.2lf\n", ans * 100);
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值