标签:
http://acm.hdu.edu.cn/showproblem.php?pid=1496
Consider equations having the following form:
a*x1^2+b*x2^2+c*x3^2+d*x4^2=0
a, b, c, d are integers from the interval [-50,50] and any of them cannot be 0.
It is consider a solution a system ( x1,x2,x3,x4 ) that verifies the equation, xi is an integer from [-100,100] and xi != 0, any i ∈{1,2,3,4}.
Determine how many solutions satisfy the given equation.
The input consists of several test cases. Each test case consists of a single line containing the 4 coefficients a, b, c, d, separated by one or more blanks.
End of file.
For each test case, output a single line containing the number of the solutions.
1 2 3 -4
1 1 1 1
39088
0
哈希。。
#include<algorithm> #include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<vector> #include<map> using std::map; using std::min; using std::sort; using std::pair; using std::vector; using std::multimap; #define pb(e) push_back(e) #define sz(c) (int)(c).size() #define mp(a, b) make_pair(a, b) #define all(c) (c).begin(), (c).end() #define iter(c) __typeof((c).begin()) #define cls(arr, val) memset(arr, val, sizeof(arr)) #define cpresent(c, e) (find(all(c), (e)) != (c).end()) #define rep(i, n) for(int i = 0; i < (int)n; i++) #define tr(c, i) for(iter(c) i = (c).begin(); i != (c).end(); ++i) const int N = 2100000; const int INF = 0x3f3f3f3f; short hash[N << 1 | 1]; int a, b, c, d; inline int squre(int x) { return x * x; } void solve() { cls(hash, 0); int ans = 0, ret = 0; for(int i = -100; i <= 100; i++) { if(!i) continue; for(int j = -100; j <= 100; j++) { if(!j) continue; ret = a * squre(i) + b * squre(j); hash[N - ret]++; } } for(int i = -100; i <= 100; i++) { if(!i) continue; for(int j = -100; j <= 100; j++) { if(!j) continue; ret = c * squre(i) + d * squre(j) + N; if(ret >= 0 && ret <= 2 * N) ans += hash[ret]; } } printf("%d\n", ans); } int main() { #ifdef LOCAL freopen("in.txt", "r", stdin); freopen("out.txt", "w+", stdout); #endif while(~scanf("%d %d %d %d", &a, &b, &c, &d)) { if(a < 0 && b < 0 && c < 0 && d < 0 || a > 0 && b > 0 && c > 0 && d > 0) { puts("0"); continue; } solve(); } return 0; }
标签:
原文地址:http://www.cnblogs.com/GadyPu/p/4792722.html