社区讨论
88分求助,一个测试点没过
P8635[蓝桥杯 2016 省 AB] 四平方和参与者 3已保存回复 12
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 12 条
- 当前快照
- 1 份
- 快照标识符
- @mhk7gf9p
- 此快照首次捕获于
- 2025/11/04 14:45 4 个月前
- 此快照最后确认于
- 2025/11/04 23:34 4 个月前
CPP
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
typedef long long ll;
const int maxS = 5 * 1e6 + 1;
typedef struct{
ll a,b,s;
}Node;
Node sum[maxS];
ll res[4];
int cnt = 0, idx;
bool cmp(Node x, Node y)
{
return x.s < y.s;
}
bool binary_search(ll x)
{
int l = 0, r = cnt - 1 ;
while(l <= r)
{
int mid = l + r >> 1;
if(sum[mid].s == x)
{
idx = mid;
return true;
}
else if(sum[mid].s > x)
r = mid - 1;
else
l = mid + 1;
}
return false;
}
int main()
{
int n;
cin>>n;
for(int a = 0; n >= a * a; a ++)
{
for(int b = a; n >= a * a + b * b; b ++)
{
sum[cnt].a = a, sum[cnt].b = b;
sum[cnt].s = a * a + b * b;
cnt ++;
}
}
sort(sum, sum + cnt, cmp);
for(int c = 0; n >= c * c; c ++)
{
for(int d = c; n >= c * c + d * d; d ++)
{
if(binary_search(n - c * c - d * d))
{
res[0] = sum[idx].a;
res[1] = sum[idx].b;
res[2] = c;
res[3] = d;
sort(res, res + 4);
for(int i = 0; i < 4; i ++)
cout<<res[i]<<" ";
cout<<endl;
return 0;
}
}
}
return 0;
}
回复
共 12 条回复,欢迎继续交流。
正在加载回复...