#include <algorithm> #include <cstdio> using namespace std; typedef long long LL; #define REP(i,n) for(int i=0;i<(n);++i) const int MAX = 100000; struct monster { int d, a, id; bool operator<(const monster &rhs) const { int g = a - d, rhsg = rhs.a - rhs.d; if(g <= 0 && rhsg <= 0) return a > rhs.a; if(g <= 0) return false; if(rhsg <= 0) return true; return d < rhs.d; } }; monster arr[MAX]; int n; LL k; int main(int argc, char *argv[]) { scanf("%d %lld", &n, &k); REP(i,n) { scanf("%d %d", &arr[i].d, &arr[i].a); arr[i].id = i; } sort(arr, arr+n); REP(i,n) if(k <= arr[i].d) { printf("NIE\n"); return 0; } else k = k - arr[i].d + arr[i].a; printf("TAK\n"); REP(i,n) printf("%d ", arr[i].id+1); 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 | #include <algorithm> #include <cstdio> using namespace std; typedef long long LL; #define REP(i,n) for(int i=0;i<(n);++i) const int MAX = 100000; struct monster { int d, a, id; bool operator<(const monster &rhs) const { int g = a - d, rhsg = rhs.a - rhs.d; if(g <= 0 && rhsg <= 0) return a > rhs.a; if(g <= 0) return false; if(rhsg <= 0) return true; return d < rhs.d; } }; monster arr[MAX]; int n; LL k; int main(int argc, char *argv[]) { scanf("%d %lld", &n, &k); REP(i,n) { scanf("%d %d", &arr[i].d, &arr[i].a); arr[i].id = i; } sort(arr, arr+n); REP(i,n) if(k <= arr[i].d) { printf("NIE\n"); return 0; } else k = k - arr[i].d + arr[i].a; printf("TAK\n"); REP(i,n) printf("%d ", arr[i].id+1); printf("\n"); return 0; } |