cf1081E

#include<bits/stdc++.h>
#define forn(i, n) for (int i = 0 ; i < int(n) ; i++)
#define fore(i, s, t) for (int i = s ; i < (int)t ; i++)
#define fi first
#define se second
#define all(x) x.begin(),x.end()
#define pf2(x,y) printf("%d %d
",x,y)
#define pf(x) printf("%d
",x)
#define each(x) for(auto it:x)  cout<<it<<endl;
#define pii pair<int,int>
#define sc(x) scanf("%d",&x)
using namespace std;
typedef long long ll;
const int maxn=2e5+5;
const int maxm=2e5+5;
const int inf=1e9;
int a[maxn],n;
vector<pair<int,int>> pp[maxn];
const int S=200000;
int main() {
	for(int i=1;i<=S;i++){
		if(i*2+1>S) break;
		for(int j=i+1;1ll*j*j-1ll*i*i<=S;j++)
			pp[1ll*j*j-1ll*i*i].push_back({i,j});
	}
	cin>>n;
	for(int i=2;i<=n;i+=2){
		int x;cin>>x;
		for(auto t:pp[x]){
			if(a[i-2]<t.fi) {
				a[i-1]=t.fi,a[i]=t.se;
				break;
			}
		}
		if(!a[i-1]) {
			puts("No");return 0;
		}
	}
	puts("Yes");
	for(int i=1;i<=n;i++)
		printf("%lld ",a[i]*1ll*a[i]-a[i-1]*1ll*a[i-1]);
	puts("");
}

  

原文地址:https://www.cnblogs.com/033000-/p/12390948.html