#define NDEBUG #include <cassert> #include <cctype> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <sstream> #include <algorithm> #include <queue> #include <string> #include <vector> using namespace std; #define TRACE(x) cerr<<"# "#x<<endl; #define DEBUG(x) cerr<<#x<<" = "<<(x)<<endl; typedef unsigned long long ULL; typedef long long LL; const int INF = 0x7FFFFFFF; struct P { int d, b, i; P(int d, int b, int i):d(d), b(b), i(i) {} }; int main() { int n, z; LL life; vector<P> v1, v2; scanf("%d %d", &n, &z); v1.reserve(n+2); v2.reserve(n+2); for(int i=0; i<n ;++i) { int d, a, b; scanf("%d %d", &d, &a); b = a - d; if(b >= 0) { v1.push_back(P(d,b,i)); } else { v2.push_back(P(d,b,i)); } } sort(v1.begin(), v1.end(), [](const P &a, const P &b) -> bool {return a.d < b.d;}); sort(v2.begin(), v2.end(), [](const P &a, const P &b) -> bool {return a.d > b.d;}); life = z; for(const P &p : v1) { if(life > p.d) { life += p.b; } else { life = 0ll; break; } } for(const P &p : v2) { if(life > p.d) { life += p.b; } else { life = 0ll; break; } } if(life > 0ll) { printf("TAK\n"); for(const P &p : v1) { printf("%d ", p.i+1); } for(const P &p : v2) { printf("%d ", p.i+1); } } else { printf("NIE"); } printf("\n"); 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 | #define NDEBUG #include <cassert> #include <cctype> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <sstream> #include <algorithm> #include <queue> #include <string> #include <vector> using namespace std; #define TRACE(x) cerr<<"# "#x<<endl; #define DEBUG(x) cerr<<#x<<" = "<<(x)<<endl; typedef unsigned long long ULL; typedef long long LL; const int INF = 0x7FFFFFFF; struct P { int d, b, i; P(int d, int b, int i):d(d), b(b), i(i) {} }; int main() { int n, z; LL life; vector<P> v1, v2; scanf("%d %d", &n, &z); v1.reserve(n+2); v2.reserve(n+2); for(int i=0; i<n ;++i) { int d, a, b; scanf("%d %d", &d, &a); b = a - d; if(b >= 0) { v1.push_back(P(d,b,i)); } else { v2.push_back(P(d,b,i)); } } sort(v1.begin(), v1.end(), [](const P &a, const P &b) -> bool {return a.d < b.d;}); sort(v2.begin(), v2.end(), [](const P &a, const P &b) -> bool {return a.d > b.d;}); life = z; for(const P &p : v1) { if(life > p.d) { life += p.b; } else { life = 0ll; break; } } for(const P &p : v2) { if(life > p.d) { life += p.b; } else { life = 0ll; break; } } if(life > 0ll) { printf("TAK\n"); for(const P &p : v1) { printf("%d ", p.i+1); } for(const P &p : v2) { printf("%d ", p.i+1); } } else { printf("NIE"); } printf("\n"); return 0; } |