#include <iostream> #include <algorithm> #include <cstdio> using namespace std; int wyn[500][500]; int dane[500]; int odp[1000000]; int N,nr; int last_lower(int x) { for (int i=x-1; i>=0; i--) { if (dane[i]<=dane[x]) return i; } } bool sprawdzenie(int x) { int suma=wyn[x][x]; int I=x; int licznik=2; for (int i=x-1; i>=1; i--) { suma+=wyn[I][i]; if (suma>dane[licznik]) return false; licznik++; } return true; } int main() { int elem; bool ujemna=false; scanf("%d", &N); dane[0]=-100000000; for (int i=1; i<=N; i++) { scanf("%d", &elem); dane[i]=elem; if (elem<0) { ujemna=true; wyn[i][1]=elem; for (int k=i+1; k<=N; k++) { scanf("%d", &elem); dane[k]=elem; int x=k-1; for (int j=1; j<=x; j++) wyn[k][j]=wyn[x][j]; wyn[k][x+1]=elem-dane[x]; if (!sprawdzenie(k)) { printf("NIE\n"); return 0; } } } if (ujemna) break; int x=last_lower(i); for (int j=1; j<=x; j++) wyn[i][j]=wyn[x][j]; if (x!=0) wyn[i][x+1]=elem-dane[x]; else wyn[i][x+1]=elem; if (!sprawdzenie(i)) { printf("NIE\n"); return 0; } } nr=0; for (int i=1; i<=N; i++) { for (int j=1; j<=i; j++) { odp[nr]=wyn[i][j]; nr++; } odp[nr]=-1000000000; nr++; } printf("TAK\n"); printf("%d\n", nr); for (int i=0; i<nr; i++) printf("%d ", odp[i]); 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 | #include <iostream> #include <algorithm> #include <cstdio> using namespace std; int wyn[500][500]; int dane[500]; int odp[1000000]; int N,nr; int last_lower(int x) { for (int i=x-1; i>=0; i--) { if (dane[i]<=dane[x]) return i; } } bool sprawdzenie(int x) { int suma=wyn[x][x]; int I=x; int licznik=2; for (int i=x-1; i>=1; i--) { suma+=wyn[I][i]; if (suma>dane[licznik]) return false; licznik++; } return true; } int main() { int elem; bool ujemna=false; scanf("%d", &N); dane[0]=-100000000; for (int i=1; i<=N; i++) { scanf("%d", &elem); dane[i]=elem; if (elem<0) { ujemna=true; wyn[i][1]=elem; for (int k=i+1; k<=N; k++) { scanf("%d", &elem); dane[k]=elem; int x=k-1; for (int j=1; j<=x; j++) wyn[k][j]=wyn[x][j]; wyn[k][x+1]=elem-dane[x]; if (!sprawdzenie(k)) { printf("NIE\n"); return 0; } } } if (ujemna) break; int x=last_lower(i); for (int j=1; j<=x; j++) wyn[i][j]=wyn[x][j]; if (x!=0) wyn[i][x+1]=elem-dane[x]; else wyn[i][x+1]=elem; if (!sprawdzenie(i)) { printf("NIE\n"); return 0; } } nr=0; for (int i=1; i<=N; i++) { for (int j=1; j<=i; j++) { odp[nr]=wyn[i][j]; nr++; } odp[nr]=-1000000000; nr++; } printf("TAK\n"); printf("%d\n", nr); for (int i=0; i<nr; i++) printf("%d ", odp[i]); return 0; } |