#include <iostream> #include <algorithm> #include <list> using namespace std; typedef long long int LL; struct potwor { LL d, a, nr; }; bool operator < (potwor A, potwor B) { if(A.a < B.a) return true; if(A.a > B.a) return false; if(A.a == B.a) { if(A.d < B.d) return false; else return true; } } list <potwor> SPIS; list <int> RESULT; int main() { LL n, z; cin >> n >> z; LL K = z; for(int i = 1; i <= n; i++) { potwor HASH; HASH.nr = i; cin >> HASH.d >> HASH.a; K = K - HASH.d + HASH.a; SPIS.push_back(HASH); } SPIS.sort(); int numer_rundy = n; while(numer_rundy != 0) { list <potwor> :: iterator X = SPIS.begin(); while(K - X->a <= 0 && X != SPIS.end()) { X++; } if(X == SPIS.end()) { goto A; } else { RESULT.push_back(X->nr); K = K - X->a + X->d; X = SPIS.erase(X); numer_rundy--; } } RESULT.reverse(); A: if(numer_rundy == 0) { cout << "TAK" << endl; for(list <int> :: iterator X = RESULT.begin(); X != RESULT.end(); X++) { int M = *X; cout << M << " "; } } else { cout << "NIE" << endl; } 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 <list> using namespace std; typedef long long int LL; struct potwor { LL d, a, nr; }; bool operator < (potwor A, potwor B) { if(A.a < B.a) return true; if(A.a > B.a) return false; if(A.a == B.a) { if(A.d < B.d) return false; else return true; } } list <potwor> SPIS; list <int> RESULT; int main() { LL n, z; cin >> n >> z; LL K = z; for(int i = 1; i <= n; i++) { potwor HASH; HASH.nr = i; cin >> HASH.d >> HASH.a; K = K - HASH.d + HASH.a; SPIS.push_back(HASH); } SPIS.sort(); int numer_rundy = n; while(numer_rundy != 0) { list <potwor> :: iterator X = SPIS.begin(); while(K - X->a <= 0 && X != SPIS.end()) { X++; } if(X == SPIS.end()) { goto A; } else { RESULT.push_back(X->nr); K = K - X->a + X->d; X = SPIS.erase(X); numer_rundy--; } } RESULT.reverse(); A: if(numer_rundy == 0) { cout << "TAK" << endl; for(list <int> :: iterator X = RESULT.begin(); X != RESULT.end(); X++) { int M = *X; cout << M << " "; } } else { cout << "NIE" << endl; } return 0; } |