Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma GCC optimize("Ofast")
- #define _CRT_SECURE_NO_WARNINGS
- #define _USE_MATH_DEFINES
- #include <iostream>
- #include <fstream>
- #include <stdio.h>
- #include <string>
- #include <vector>
- #include <cmath>
- #include <algorithm>
- #include <set>
- #include <map>
- #include <ctime>
- #include <cstring>
- #include <iomanip>
- #include <random>
- #include <unordered_set>
- #include <unordered_map>
- #include <deque>
- #include <queue>
- #include <bitset>
- #include <sstream>
- using namespace std;
- #define mp make_pair
- #define X first
- #define Y second
- #define all(x) x.begin(), x.end()
- #define all_(x) x.rbegin(), x.rend()
- #define multi_test 0
- typedef unsigned int ui;
- typedef long long ll;
- typedef unsigned long long ull;
- typedef long double ld;
- typedef pair<ll, ll> pll;
- typedef pair<int, int> pii;
- const int INF = 1e9 + 9;
- const ll INF1 = 1e18 + 9;
- const ll MAXN = 4e5 + 7;
- const ll MAXN1 = 1 << 11;
- const ll MAXN2 = 2e7 + 9;
- const ll MOD = 998244353;
- const ll MOD1 = 1e9 + 9;
- const ll ALPH = 50;
- const ll PW1 = 239;
- const ll PW2 = 199;
- const ll PW3 = 193;
- const ll PW4 = 117;
- const ld EPS = 1e-9;
- const ll BLOCK = 3684;
- const ll BLOCK1 = 1 << 9;
- void solve();
- signed main(){
- srand('a' + 'l' + 'e' + 'x' + 'X' + '5' + '1' + '2');
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- #ifdef _DEBUG
- #define MAXN 2007
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #endif // _DEBUG
- int q = 1;
- if (multi_test) cin >> q;
- while (q--) solve();
- }
- /*-------------------------------------------------------------------------------------------------------------*/
- ll ans[MAXN], ans1[MAXN];
- void solve() {
- int n;
- cin >> n;
- vector<ll> v(n / 2);
- for (int i = 0; i < v.size(); ++i) {
- cin >> v[i];
- ll a = 0, b = INF;
- for (int j = 1; j * j <= v[i]; ++j) {
- if (v[i] % j == 0) {
- int k = v[i] / j;
- if ((k + j) % 2 != 0) continue;
- int nb = (k + j) / 2;
- int na = (k - j) / 2;
- if (i == 0) {
- if (nb < b) {
- a = na, b = nb;
- }
- }
- else if (na > ans[2 * i - 1] && nb < b) {
- a = na, b = nb;
- }
- }
- }
- if (b == INF) {
- cout << "No";
- return;
- }
- ans[i * 2] = a;
- ans[i * 2 + 1] = b;
- }
- ans1[0] = ans[0] * ans[0];
- ans1[1] = v[0];
- for (int i = 1; i < v.size(); ++i) {
- ans1[2 * i] = ans[i * 2] * ans[i * 2] - ans[i * 2 - 1] * ans[i * 2 - 1];
- ans1[2 * i + 1] = v[i];
- }
- ll p = 0;
- for (int i = 0; i < n; ++i) {
- p += ans1[i];
- if (p != ll(sqrtl(p)) * ll(sqrtl(p))) {
- cout << "No";
- return;
- }
- }
- cout << "Yes\n";
- for (int i = 0; i < n; ++i) {
- cout << ans1[i] << " ";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement