POJ 1840 - Eqs, HRBUST 1013 - Eqs [hash]

Topic Portal


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


The meaning of problems

Entry 5 5 number ( a 1 , a 2 , a 3 , a 4 , a 5 ) [ 50 , 50 ] (A1, a2, a3, a4, a5) ∈ [-50,50] , seeking to satisfy a 1 a1 * x 1 x1 3 + a 2 + A2 * x 2 x2 3 + a 3 + A3 * x 3 x3 3 + a 4 + A4 * x 4 x4 3 + a 5 + A5 * x 5 x5 3 = 0 =0 The number of the polynomial ( x 1 , x 2 , x 3 , x 4 , x 5 ) [ 50 , 50 ] (x1,x2,x3,x4,x5)∈[-50,50]


answer

  • 5 5 layer solution is certainly the time complexity of the cycle of violence is not allowed, so the converted a 1 a1 * x13 + a 2 + A2 * x23 = ( a 3 = - (a3 * x33 + a 4 + A4 * x43 + a 5 + A5 * x53 ) )
  • As can be seen, the upper limit of the range to satisfy the equation 50 50 50*50 . 3, since the index can not be negative, increasing the unified array subscript m i d mid
  • Then the water is too violent ~~~

AC-Code

#inlcude<bits/stdc++.h>
using namespace std;

const int maxn = 12500000 << 1;
short h[maxn];
int main() {
	const int mid = 12500000;
	int a, b, c, d, e;
	while (cin >> a >> b >> c >> d >> e) {
		memset(h, 0, sizeof h);
		int ans = 0;
		for (int i = -50; i <= 50; ++i) {
			if (!i)	continue;
			for (int j = -50; j <= 50; ++j) {
				if (!j)	continue;
				++h[a * i * i * i + b * j * j * j + mid];
			}
		}
		for (int i = -50; i <= 50; ++i) {
			if (!i)	continue;
			for (int j = -50; j <= 50; ++j) {
				if (!j)	continue;
				for (int k = -50; k <= 50; ++k) {
					if (!k)	continue;
					if (-(c * i * i * i + d * j * j * j + e * k * k * k) + mid < maxn
						and -(c * i * i * i + d * j * j * j + e * k * k * k) + mid >= 0)
						ans += h[-(c * i * i * i + d * j * j * j + e * k * k * k) + mid];
				}
			}
		}
		cout << ans << endl;
	}

	return 0;
}
Published 104 original articles · won praise 60 · views 5770

Guess you like

Origin blog.csdn.net/Q_1849805767/article/details/104025954