// Artur Minorczyk #include <cstdio> #include <iostream> #include <algorithm> #include <string> #include <vector> using namespace std; typedef vector<int> VI; typedef vector<VI> VVI; typedef pair<int, int> PI; typedef vector<PI> VPI; typedef long long LL; #define FOR(x, b, e) for(int x = b; x <= (e); ++x) #define FORD(x, b, e) for(int x = b; x >= (e); --x) #define REP(x, n) for(int x = 0; x < (n); ++x) #define VAR(v, n) __typeof(n) v = (n) #define FOREACH(i, c) for(VAR(i, (c).begin()); i != (c).end(); ++i) #define ALL(c) (c).begin(), (c).end() #define SIZE(x) ((int)(x).size()) #define PB push_back #define MP make_pair #define ST first #define ND second const int INF = 1000000001; const double EPS = 10e-9; struct Monster { int first, second, id; }; bool Compare(Monster a, Monster b) { return a.ST == b.ST ? a.ND < b.ND : a.ST < b.ST; } bool CompareDiff(Monster a, Monster b) { return a.ND == b.ND ? a.ST > b.ST : a.ND > b.ND; } int main() { int n; LL z; Monster m; scanf("%d%lld", &n, &z); vector<Monster> mon[2]; VI result(n), temp(n); REP(x, n) { scanf("%d%d", &m.ST, &m.ND); m.id = x + 1; if(m.ND - m.ST > 0) mon[0].PB(m); else mon[1].PB(m); } sort(ALL(mon[0]), Compare); sort(ALL(mon[1]), CompareDiff); REP(x, 2) FOREACH(it, mon[x]) { z -= it->ST; if(z <= 0) { printf("NIE\n"); return 0; } z += it->ND; } printf("TAK\n"); REP(x, 2) FOREACH(it, mon[x]) printf("%d ", it->id); 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 | // Artur Minorczyk #include <cstdio> #include <iostream> #include <algorithm> #include <string> #include <vector> using namespace std; typedef vector<int> VI; typedef vector<VI> VVI; typedef pair<int, int> PI; typedef vector<PI> VPI; typedef long long LL; #define FOR(x, b, e) for(int x = b; x <= (e); ++x) #define FORD(x, b, e) for(int x = b; x >= (e); --x) #define REP(x, n) for(int x = 0; x < (n); ++x) #define VAR(v, n) __typeof(n) v = (n) #define FOREACH(i, c) for(VAR(i, (c).begin()); i != (c).end(); ++i) #define ALL(c) (c).begin(), (c).end() #define SIZE(x) ((int)(x).size()) #define PB push_back #define MP make_pair #define ST first #define ND second const int INF = 1000000001; const double EPS = 10e-9; struct Monster { int first, second, id; }; bool Compare(Monster a, Monster b) { return a.ST == b.ST ? a.ND < b.ND : a.ST < b.ST; } bool CompareDiff(Monster a, Monster b) { return a.ND == b.ND ? a.ST > b.ST : a.ND > b.ND; } int main() { int n; LL z; Monster m; scanf("%d%lld", &n, &z); vector<Monster> mon[2]; VI result(n), temp(n); REP(x, n) { scanf("%d%d", &m.ST, &m.ND); m.id = x + 1; if(m.ND - m.ST > 0) mon[0].PB(m); else mon[1].PB(m); } sort(ALL(mon[0]), Compare); sort(ALL(mon[1]), CompareDiff); REP(x, 2) FOREACH(it, mon[x]) { z -= it->ST; if(z <= 0) { printf("NIE\n"); return 0; } z += it->ND; } printf("TAK\n"); REP(x, 2) FOREACH(it, mon[x]) printf("%d ", it->id); printf("\n"); return 0; } |