#include <bits/stdc++.h> #define IOSTREAM_BOOST true using namespace std; int n; long long numbers[305]; vector<long long> seq[305]; int main() { #if IOSTREAM_BOOST ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); #endif cin >> n; for(int i = 0; i < n; i++) cin >> numbers[i]; for(long long i = 0; i < n; i++){ long long baseQ = numbers[i] / (i + 1); long long remainder = numbers[i] % (i + 1); if(remainder < 0) remainder += i + 1, baseQ--; seq[i] = vector<long long>(i + 1, baseQ); if(remainder == 1) seq[i][0] = baseQ + 1; else for(int j = 0; j < remainder; j++) seq[i][i * j / (remainder - 1)] = baseQ + 1; } bool broken = false; for(int i = 0; i < n; i++) for(int j = i + 1; j < n; j++){ long long ssum = 0; for(int k = 0; k < i + 1; k++) ssum += seq[j][k]; if(ssum > numbers[i]) broken = true; for(int k = i + 2; k < j + 1; k++){ ssum += seq[j][k] - seq[j][k - i - 2]; if(ssum > numbers[i]) broken = true; } } if(broken){ cout << "NIE\n"; return 0; } cout << "TAK\n"; cout << n + n * (n + 1) / 2 << "\n"; for(int i = 0; i < n; i++){ for(int j = 0; j < i + 1; j++) cout << seq[i][j] << " "; cout << (long long)(-1e13) << " "; } cout << "\n"; 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 | #include <bits/stdc++.h> #define IOSTREAM_BOOST true using namespace std; int n; long long numbers[305]; vector<long long> seq[305]; int main() { #if IOSTREAM_BOOST ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); #endif cin >> n; for(int i = 0; i < n; i++) cin >> numbers[i]; for(long long i = 0; i < n; i++){ long long baseQ = numbers[i] / (i + 1); long long remainder = numbers[i] % (i + 1); if(remainder < 0) remainder += i + 1, baseQ--; seq[i] = vector<long long>(i + 1, baseQ); if(remainder == 1) seq[i][0] = baseQ + 1; else for(int j = 0; j < remainder; j++) seq[i][i * j / (remainder - 1)] = baseQ + 1; } bool broken = false; for(int i = 0; i < n; i++) for(int j = i + 1; j < n; j++){ long long ssum = 0; for(int k = 0; k < i + 1; k++) ssum += seq[j][k]; if(ssum > numbers[i]) broken = true; for(int k = i + 2; k < j + 1; k++){ ssum += seq[j][k] - seq[j][k - i - 2]; if(ssum > numbers[i]) broken = true; } } if(broken){ cout << "NIE\n"; return 0; } cout << "TAK\n"; cout << n + n * (n + 1) / 2 << "\n"; for(int i = 0; i < n; i++){ for(int j = 0; j < i + 1; j++) cout << seq[i][j] << " "; cout << (long long)(-1e13) << " "; } cout << "\n"; return 0; } |