【题目链接】AcWing 1221. 四平方和【2022不超时+模拟哈希表+二分两种方法,超详细思考过程】 - AcWing
输入样例:
5
输出样例:
0 0 1 2
【代码及详细注释】(哈希做法)
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
const int N=5e6+10;
int n,h[N*2];
int main()
{
cin>>n;
memset(h,-1,sizeof h);
for(int c=0;c*c<=n;c++)
{
for(int d=c;c*c+d*d<=n;d++)
{
int t=c*c+d*d;
if(h[t]==-1)//如果当前值没有被标记过
{
h[t]=c;//保存可以用c,d拼凑出来的数的c的取值
}
}
}
for(int a=0;a<=n;a++)
{
for(int b=a;a*a+b*b<=n;b++)
{
int t=n-a*a-b*b;
int c=h[t];
if(c==-1) continue;
int d=sqrt(t-c*c);//用哈希存储的取值判断能否用a,b,c,d拼出来
//倒推d的取值
cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
return 0;
}
}
return 0;
}