POJ 1840 Eqs (violent)
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 in on the first line the number of the solutions for the given equation.Sample Input 37 29 41 43 47 Sample Output 654 Source Romania OI 2002 |
Naked brute force question: five cycles were opened during the competition, and the time was limited to 5 seconds. I thought it was impossible to run locally.
Short is used for the first time.
#include
#include
#include
#include#include
typedef long long LL;using namespace std; short hash[25000001];int a1,a2,a3,a4,a5;int main(){ while(~scanf("%d%d%d%d%d",&a1,&a2,&a3,&a4,&a5)) { int ans=0; memset(hash,0,sizeof(hash)); for(int x1=-50;x1<=50;x1++) { if(x1==0) continue; for(int x2=-50;x2<=50;x2++) { if(x2==0) continue; int s=(-1)*(a1*x1*x1*x1+a2*x2*x2*x2); if(s<0) s+=25000000; hash[s]++; } } for(int x1=-50;x1<=50;x1++) { if(x1==0) continue; for(int x2=-50;x2<=50;x2++) { if(x2==0) continue; for(int x3=-50;x3<=50;x3++) { if(x3==0) continue; int s=a3*x1*x1*x1+a4*x2*x2*x2+a5*x3*x3*x3; if(s<0) s+=25000000; if(hash[s]) ans+=hash[s]; } } } printf("%d\n",ans); } return 0;}