ACM题集:https://blog.csdn.net/weixin_39778570/article/details/83187443
题目链接:https://code.mi.com/problem/list/view?id=142&cid=9
a
∗
x
1
3
+
b
∗
x
2
3
+
c
∗
x
3
3
=
d
∗
x
4
3
+
e
∗
x
5
3
a*x1^3+b*x2^3+c*x3^3 = d*x4^3+e*x5^3
a∗x13+b∗x23+c∗x33=d∗x43+e∗x53 的非0解个数
只要先预处理
a
∗
x
4
3
+
b
∗
x
5
3
a*x4^3+b*x5^3
a∗x43+b∗x53的个数,让后用数组存下来
对于负数,直接加上25000000即可,注意数组不要用int会报空间,可以用short
因为
2
∗
5
0
4
=
12500000
2*50^4 = 12500000
2∗504=12500000, +N正好区分正负
让后暴力枚举x1,x2,x3即可
#include<bits/stdc++.h>
#define fo(i,j,n) for(register int i=j; i<=n; ++i)
using namespace std;
const int N=25000000;
inline int rp(int x){
if(x<0)x+=N;
return x;
}
inline int sqr(int x){return x*x*x;}
int a,b,c,d,e;
short cnt[N+1];
int main(){
scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
int ans = 0;
fo(i,-50,50)if(i)fo(j,-50,50)if(j) cnt[rp(sqr(i)*d+sqr(j)*e)]++;
fo(i,-50,50)if(i)fo(j,-50,50)if(j)fo(k,-50,50)if(k)
ans += cnt[rp(sqr(i)*a+sqr(j)*b+sqr(k)*c)];
cout<<ans;
return 0;
}