#include <cstdio> #include <algorithm> #include <vector> #define scanf(args...) (scanf(args) ? : 0) typedef long long int LL; const int MAXN = 1e5+5; std::pair<int, int> T[MAXN]; int res[MAXN]; bool cmp1(int a, int b) { return T[a].first < T[b].first; } bool cmp2(int a, int b) { return T[a].second < T[b].second; } int main() { int n; LL hp; scanf("%d%Ld", &n, &hp); LL sum = 0; std::vector<int> v1, v2; for (int i=0; i<n; i++) { scanf("%d%d", &T[i].first, &T[i].second); if (T[i].first < T[i].second) v1.push_back(i); else { v2.push_back(i); sum += T[i].second-T[i].first; } } bool success = true; std::sort(v1.begin(), v1.end(), cmp1); int it1 = 0; for (int p: v1) { if (hp > T[p].first) { hp += T[p].second-T[p].first; res[it1++] = p; } else success = false; } hp += sum; std::sort(v2.begin(), v2.end(), cmp2); int it2 = n-1; for (int p: v2) { if (hp > T[p].second) { hp += T[p].first-T[p].second; res[it2--] = p; } else success = false; } if (!success) printf("NIE\n"); else { printf("TAK\n"); for (int i=0; i<n; i++) printf("%d ", res[i]+1); printf("\n"); } }
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> #include <algorithm> #include <vector> #define scanf(args...) (scanf(args) ? : 0) typedef long long int LL; const int MAXN = 1e5+5; std::pair<int, int> T[MAXN]; int res[MAXN]; bool cmp1(int a, int b) { return T[a].first < T[b].first; } bool cmp2(int a, int b) { return T[a].second < T[b].second; } int main() { int n; LL hp; scanf("%d%Ld", &n, &hp); LL sum = 0; std::vector<int> v1, v2; for (int i=0; i<n; i++) { scanf("%d%d", &T[i].first, &T[i].second); if (T[i].first < T[i].second) v1.push_back(i); else { v2.push_back(i); sum += T[i].second-T[i].first; } } bool success = true; std::sort(v1.begin(), v1.end(), cmp1); int it1 = 0; for (int p: v1) { if (hp > T[p].first) { hp += T[p].second-T[p].first; res[it1++] = p; } else success = false; } hp += sum; std::sort(v2.begin(), v2.end(), cmp2); int it2 = n-1; for (int p: v2) { if (hp > T[p].second) { hp += T[p].first-T[p].second; res[it2--] = p; } else success = false; } if (!success) printf("NIE\n"); else { printf("TAK\n"); for (int i=0; i<n; i++) printf("%d ", res[i]+1); printf("\n"); } } |