#include <iostream>
#include <stdio.h>
int min_find_withLimit(long double *array, int index){
long double min = *array;
int outIndex = 0;
for(int i=1; i<=index; i++){
if(array[i]<min){
min = array[i];
outIndex = i;
}
}
return outIndex;
}
bool partial_max_possible(long long int* val, long double* max_per_single,
int i, int origin, long long int mx){
int c = min_find_withLimit(max_per_single, i);
int full = (i+1)/(c+1);
int rest = (i+1)%(c+1);
mx += full * val[c];
//printf("%d %lld %d %lld %d %d %lld\n", i, val[i], c, val[c], full, rest, mx);
if (rest==0) {
if (val[origin]<=mx){
return true;
} else {
return false;
}
} else {
return partial_max_possible(val, max_per_single, rest-1, origin, mx);
}
}
int main() {
int n;
scanf("%d", &n);
long long int val[300];
long double max_per_single[300];
for(int i=0; i<n; i++){
scanf("%lld", &val[i]);
max_per_single[i] = val[i]/(float)(i+1);
bool x = partial_max_possible(val, max_per_single, i, i, 0);
if(!x){
printf("NIE");
return 0;
}
}
printf("TAK\n");
printf("%d\n", n);
printf("%lld", val[0]);
for(int i=1; i<n; i++){
printf(" %lld", val[i]-val[i-1]);
}
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 | #include <iostream> #include <stdio.h> int min_find_withLimit(long double *array, int index){ long double min = *array; int outIndex = 0; for(int i=1; i<=index; i++){ if(array[i]<min){ min = array[i]; outIndex = i; } } return outIndex; } bool partial_max_possible(long long int* val, long double* max_per_single, int i, int origin, long long int mx){ int c = min_find_withLimit(max_per_single, i); int full = (i+1)/(c+1); int rest = (i+1)%(c+1); mx += full * val[c]; //printf("%d %lld %d %lld %d %d %lld\n", i, val[i], c, val[c], full, rest, mx); if (rest==0) { if (val[origin]<=mx){ return true; } else { return false; } } else { return partial_max_possible(val, max_per_single, rest-1, origin, mx); } } int main() { int n; scanf("%d", &n); long long int val[300]; long double max_per_single[300]; for(int i=0; i<n; i++){ scanf("%lld", &val[i]); max_per_single[i] = val[i]/(float)(i+1); bool x = partial_max_possible(val, max_per_single, i, i, 0); if(!x){ printf("NIE"); return 0; } } printf("TAK\n"); printf("%d\n", n); printf("%lld", val[0]); for(int i=1; i<n; i++){ printf(" %lld", val[i]-val[i-1]); } return 0; } |
English