社区讨论

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 条回复,欢迎继续交流。

正在加载回复...