#include <cstdio> #include <algorithm> int n, m, p, k, c, przed, x; int P[101]; int P_BACK[101]; int START[101]; int K[101]; int C[101]; int prze[201]; int main(){ scanf("%d %d", &n, &m); przed=2*n; for(int i = 0; i < n; ++i){ scanf("%d %d %d", &p, &k, &c); P[i]=p; P_BACK[i]=p; START[i]=0; K[i]=k; C[i]=c; prze[i]=p; prze[n+i]=k; } std::sort(prze, prze+przed); int wykon=-1; int index=0; bool flag; do{ flag=false; for(int i = 0; i < n; ++i){ if(C[i]>0){ index=i; flag=true; break; } } int old_przed = -1; int j = 0; while(j < przed){ int przed_tmp=prze[j]; //printf("m = %d, j = %d, przed_tmp %d\n", m, j, przed_tmp); //printf("wykon %d\n", wykon); if(przed_tmp > old_przed){ if(wykon >= 0){ if(przed_tmp > (START[wykon]+C[wykon]) ){ przed_tmp=START[wykon]+C[wykon]; j--; } //printf("przed_tmp = %d\n", przed_tmp); //printf("w=%d :: wykon p = %d k = %d c =%d START = %d\n", wykon, P[wykon], K[wykon], C[wykon], START[wykon]); C[wykon]=C[wykon]-(przed_tmp-START[wykon]); P[wykon]=przed_tmp; wykon=-1; } flag=false; for(int i = 0; i < n; ++i){ if(C[i]>0){ index=i; flag=true; break; } } if(!flag) break; for(int i=0; i<przed; ++i){ if((P[i]<K[i]) && (K[i]>przed_tmp) && (C[i] > 0)){ if(P[i]<=przed_tmp){ //if(przed_tmp == 7){ // printf("### K[i] = %d K[index] = %d ###\n", K[i], K[index]); //} if(K[i]<K[index]){ index=i; } } } } if(j<(przed-1)){ wykon=index; } //printf("wykonnnn %d\n", wykon); START[wykon]=przed_tmp; old_przed=przed_tmp; } j++; } for(int i = 0; i < n; ++i){ P[i]=P_BACK[i]; //printf("%d: P = %d K = %d C = %d\n", i, P[i], K[i], C[i]); } m--; }while(flag && m > 0); if(flag){ printf("NIE"); }else{ printf("TAK"); } }
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 | #include <cstdio> #include <algorithm> int n, m, p, k, c, przed, x; int P[101]; int P_BACK[101]; int START[101]; int K[101]; int C[101]; int prze[201]; int main(){ scanf("%d %d", &n, &m); przed=2*n; for(int i = 0; i < n; ++i){ scanf("%d %d %d", &p, &k, &c); P[i]=p; P_BACK[i]=p; START[i]=0; K[i]=k; C[i]=c; prze[i]=p; prze[n+i]=k; } std::sort(prze, prze+przed); int wykon=-1; int index=0; bool flag; do{ flag=false; for(int i = 0; i < n; ++i){ if(C[i]>0){ index=i; flag=true; break; } } int old_przed = -1; int j = 0; while(j < przed){ int przed_tmp=prze[j]; //printf("m = %d, j = %d, przed_tmp %d\n", m, j, przed_tmp); //printf("wykon %d\n", wykon); if(przed_tmp > old_przed){ if(wykon >= 0){ if(przed_tmp > (START[wykon]+C[wykon]) ){ przed_tmp=START[wykon]+C[wykon]; j--; } //printf("przed_tmp = %d\n", przed_tmp); //printf("w=%d :: wykon p = %d k = %d c =%d START = %d\n", wykon, P[wykon], K[wykon], C[wykon], START[wykon]); C[wykon]=C[wykon]-(przed_tmp-START[wykon]); P[wykon]=przed_tmp; wykon=-1; } flag=false; for(int i = 0; i < n; ++i){ if(C[i]>0){ index=i; flag=true; break; } } if(!flag) break; for(int i=0; i<przed; ++i){ if((P[i]<K[i]) && (K[i]>przed_tmp) && (C[i] > 0)){ if(P[i]<=przed_tmp){ //if(przed_tmp == 7){ // printf("### K[i] = %d K[index] = %d ###\n", K[i], K[index]); //} if(K[i]<K[index]){ index=i; } } } } if(j<(przed-1)){ wykon=index; } //printf("wykonnnn %d\n", wykon); START[wykon]=przed_tmp; old_przed=przed_tmp; } j++; } for(int i = 0; i < n; ++i){ P[i]=P_BACK[i]; //printf("%d: P = %d K = %d C = %d\n", i, P[i], K[i], C[i]); } m--; }while(flag && m > 0); if(flag){ printf("NIE"); }else{ printf("TAK"); } } |