HDU 1496(Equations)

哈希题,如果前两项的和与后两项的和的相反数相等,则解增加一。由于前两项的和与后两项的和的相反数取值范围都在 [-1000000, 1000000],所以计算两者的哈希值,相等则解增加一。由于每个 xi 可正可负,所以最终数量要乘以 16。

#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 2000005;

int h[MAXN];

int main()
{
	int a, b, c, d;
	while (cin >> a >> b >> c >> d)
	{
		if ((a < 0 && b < 0 && c < 0 && d < 0) || (a > 0 && b > 0 && c > 0 && d > 0))
		{
			cout << 0 << endl;
			continue;
		}
		memset(h, 0, sizeof(h));
		for (int i = 1; i <= 100; i++) //计算前两项的和的哈希值
		{
			for (int j = 1; j <= 100; j++)
				h[a * i * i + b * j * j + 1000000]++;
		}
		int total = 0;
		for (int i = 1; i <= 100; i++) //计算后两项的和的相反数的哈希值
		{
			for (int j = 1; j <= 100; j++)
				total += h[-c * i * i - d * j * j + 1000000];
		}
		cout << total * 16 << endl;
	}
	return 0;
}

继续加油。

发布了332 篇原创文章 · 获赞 1 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Intelligence1028/article/details/105713403
hdu