#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll MIN = -1e13; // bool verify(const vector<ll>& res, const vector<int>& A) { // map<int, ll> mxs; // bool ok = true; // for(size_t i = 0; i < res.size(); i++) { // for(size_t j = i; j < res.size(); j++) { // ll mx_so_far = res[j]; // for(size_t k = i; k <= j; k++) { // mx_so_far = max(mx_so_far, res[j]); // } // mxs[j - i + 1] = mx_so_far; // } // } // for(size_t i = 0; i < A.size(); i++) { // if(A[i] < mxs[i + 1]) { // cerr << "not ok" << endl; // ok = false; // break; // } // } // return ok; // } pair<bool, vector<ll>> gen_number(int num, int len, int mxi, const vector<int>& constraints) { vector<ll> ans; int sum_so_far = 0; int cindex = 0; if(num > mxi) { int curr_len = 0; while(num > 0) { int inc = min(constraints[cindex++] - sum_so_far, num); ans.push_back(inc); sum_so_far += inc; num -= inc; curr_len++; if (curr_len > len || inc > mxi) { return {false, ans}; } } } else { ans.push_back(num); } return {true, ans}; } vector<ll> solve(const vector<int>& A) { int mx = A.front(); int zeros = A.size(); vector<ll> ans; for(size_t i = 0; i < A.size(); i++) { auto it = A[i]; auto res = gen_number(it, i + 1, mx, A); bool ok = res.first; vector<ll> number = res.second; if(!ok) { cout << "NIE" << endl; // dbgm(A, i + 1, res); return ans; } for(auto d: number) ans.push_back(d); for(int j = 0; j < zeros; j++) ans.push_back(MIN); } cout << "TAK" << endl; cout << ans.size() << endl; for(auto x: ans) cout << x << " "; cout << endl; // if(!verify(ans, A)) cout << "bug" << endl; return ans; } // void gen() { // vector<int> vec; // size_t n = 300; // // for(size_t i = 0; i < 1000; i++) { // for(size_t j = 0; j < n; j++) { // vec.push_back(rand() % 20); // } // solve(vec); // vec.clear(); // } // } int main(int argc, char const *argv[]) { ios_base::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; vector<int> A(n); for(int i = 0; i < n; i++) cin >> A[i]; solve(A); // gen(); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | #include <bits/stdc++.h> using namespace std; typedef long long ll; const ll MIN = -1e13; // bool verify(const vector<ll>& res, const vector<int>& A) { // map<int, ll> mxs; // bool ok = true; // for(size_t i = 0; i < res.size(); i++) { // for(size_t j = i; j < res.size(); j++) { // ll mx_so_far = res[j]; // for(size_t k = i; k <= j; k++) { // mx_so_far = max(mx_so_far, res[j]); // } // mxs[j - i + 1] = mx_so_far; // } // } // for(size_t i = 0; i < A.size(); i++) { // if(A[i] < mxs[i + 1]) { // cerr << "not ok" << endl; // ok = false; // break; // } // } // return ok; // } pair<bool, vector<ll>> gen_number(int num, int len, int mxi, const vector<int>& constraints) { vector<ll> ans; int sum_so_far = 0; int cindex = 0; if(num > mxi) { int curr_len = 0; while(num > 0) { int inc = min(constraints[cindex++] - sum_so_far, num); ans.push_back(inc); sum_so_far += inc; num -= inc; curr_len++; if (curr_len > len || inc > mxi) { return {false, ans}; } } } else { ans.push_back(num); } return {true, ans}; } vector<ll> solve(const vector<int>& A) { int mx = A.front(); int zeros = A.size(); vector<ll> ans; for(size_t i = 0; i < A.size(); i++) { auto it = A[i]; auto res = gen_number(it, i + 1, mx, A); bool ok = res.first; vector<ll> number = res.second; if(!ok) { cout << "NIE" << endl; // dbgm(A, i + 1, res); return ans; } for(auto d: number) ans.push_back(d); for(int j = 0; j < zeros; j++) ans.push_back(MIN); } cout << "TAK" << endl; cout << ans.size() << endl; for(auto x: ans) cout << x << " "; cout << endl; // if(!verify(ans, A)) cout << "bug" << endl; return ans; } // void gen() { // vector<int> vec; // size_t n = 300; // // for(size_t i = 0; i < 1000; i++) { // for(size_t j = 0; j < n; j++) { // vec.push_back(rand() % 20); // } // solve(vec); // vec.clear(); // } // } int main(int argc, char const *argv[]) { ios_base::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; vector<int> A(n); for(int i = 0; i < n; i++) cin >> A[i]; solve(A); // gen(); return 0; } |