POJ 1840 Eqs Hash

本文探讨了如何通过编程计算给定形式方程的解的数量,方程系数为整数区间[-50,50]内的值。文章详细介绍了算法实现步骤,并提供了代码示例。

 

/*
Description
Consider equations having the following form: 
a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 
The coefficients are given integers from the interval [-50,50]. 
It is consider a solution a system (x1, x2, x3, x4, x5) that verifies the equation, xi∈[-50,50], xi != 0, any i∈{1,2,3,4,5}. 

Determine how many solutions satisfy the given equation. 
Input
The only line of input contains the 5 coefficients a1, a2, a3, a4, a5, separated by blanks.
Output
The output will contain on the first line the number of the solutions for the given equation.
Sample Input
37 29 41 43 47
Sample Output
654
*/
//目测是最近写的最短的代码,500ms 3900K飘过,有卡BUG嫌疑
//题目很水
//就是给你5个数计算一个等式成立的解的个数
//放入hash中判断一下,计算数目就行
#include<iostream>
#include<string.h>
using namespace std;
const int MAX = 20000000;
char hash[40000000];   //这里是关键,用char比short节约1半内存,否则直接超内存,尼玛我从int改short再改char才过
int main()
{
//	freopen("in.txt","r",stdin);
	memset(hash,0,sizeof(hash));
	int sum=0,i,j,k;
	int a1,a2,a3,a4,a5;
	cin >> a1 >> a2 >> a3 >> a4 >> a5 ;
	//前半段
	for(i = -50 ; i <= 50 ; i++)
		for(j = -50 ; j <= 50 ; j++)
			if(i!=0 && j!=0)
				hash[i*i*i*a1 + j*j*j*a2 + MAX]++;
	//后半段
	for(i = -50 ; i <= 50 ; i++)
		for(j = -50 ; j <= 50 ; j++)
			for(k = -50 ; k <= 50 ;k++)
				if(i!=0 && j!=0 && k!=0)
					sum+=hash[i*i*i*a3 + j*j*j*a4 + k*k*k*a5 + MAX];
	cout << sum << endl;
	return 0;
}

转载于:https://www.cnblogs.com/Felix-F/archive/2012/03/14/3223696.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值