#include <cstdio> int main(){ int n, player; scanf("%d", &n); scanf("%d", &player); int atak[n]; int eliksir[n]; unsigned int index[n]; int sila = player; for(int i = 0; i < n; i++){ scanf("%d", &atak[i]); scanf("%d", &eliksir[i]); sila = sila - atak[i] + eliksir[i]; index[i] = i; } if(sila <= 0){ printf("%s\n", "NIE"); return 0; } int pocz = 0; int koniec = n; int j , v, x; unsigned int y; for (int k = pocz + 1; k < koniec ; k++) { // pÄ?tla zewnÄ?trzna, k to pierwszy nieposortowany j = k - 1; // zaczynamy od elementu k-1 v = eliksir[k] ; // kopiujemy wyróşniony element do zmiennej v x = atak[k]; y = index[k]; while ( j >= 0 && v < eliksir[j] ) // dopĂłki v jest mniejszy niĹź a[j] { // i nie osiÄ?gniÄ?ty zostaĹ? poczÄ?tek tablicy eliksir[j+1] = eliksir[j]; // przesuĹ? element w prawo atak[j+1] = atak[j]; index[j+1] = index[j]; j-- ; // sprawdĹş poprzedni element } // niezmiennik: (j==-1) lub (v >= a[j]) eliksir[j+1] = v ; atak[j+1] = x; index[j+1] = y; } int h = n; int m = n; int licznik = 0; int output[n]; while(n >= 0){ bool flaga = true; while(h >= 0 && flaga == true){ if(atak[h] != -1 && atak[h] < player){ player = player - atak[h] + eliksir[h]; atak[h] = -1; eliksir[h] = -1; flaga = false; output[licznik] = index[h]; licznik++; } h--; } n--; } printf("%s\n", "TAK"); for(int i = 0; i < m; i++){ printf("%d", output[i]+1); printf("%s", " "); } }
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 | #include <cstdio> int main(){ int n, player; scanf("%d", &n); scanf("%d", &player); int atak[n]; int eliksir[n]; unsigned int index[n]; int sila = player; for(int i = 0; i < n; i++){ scanf("%d", &atak[i]); scanf("%d", &eliksir[i]); sila = sila - atak[i] + eliksir[i]; index[i] = i; } if(sila <= 0){ printf("%s\n", "NIE"); return 0; } int pocz = 0; int koniec = n; int j , v, x; unsigned int y; for (int k = pocz + 1; k < koniec ; k++) { // pÄ?tla zewnÄ?trzna, k to pierwszy nieposortowany j = k - 1; // zaczynamy od elementu k-1 v = eliksir[k] ; // kopiujemy wyróşniony element do zmiennej v x = atak[k]; y = index[k]; while ( j >= 0 && v < eliksir[j] ) // dopĂłki v jest mniejszy niĹź a[j] { // i nie osiÄ?gniÄ?ty zostaĹ? poczÄ?tek tablicy eliksir[j+1] = eliksir[j]; // przesuĹ? element w prawo atak[j+1] = atak[j]; index[j+1] = index[j]; j-- ; // sprawdĹş poprzedni element } // niezmiennik: (j==-1) lub (v >= a[j]) eliksir[j+1] = v ; atak[j+1] = x; index[j+1] = y; } int h = n; int m = n; int licznik = 0; int output[n]; while(n >= 0){ bool flaga = true; while(h >= 0 && flaga == true){ if(atak[h] != -1 && atak[h] < player){ player = player - atak[h] + eliksir[h]; atak[h] = -1; eliksir[h] = -1; flaga = false; output[licznik] = index[h]; licznik++; } h--; } n--; } printf("%s\n", "TAK"); for(int i = 0; i < m; i++){ printf("%d", output[i]+1); printf("%s", " "); } } |