#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
struct Monster {
int no;
int lost;
int won;
};
struct PositiveComp {
public:
bool operator()(const Monster& m1, const Monster& m2) {
if (m1.lost == m2.lost) {
return m1.won > m2.won;
}
return m1.lost < m2.lost;
}
};
struct NegativeComp {
public:
bool operator()(const Monster& m1, const Monster& m2) {
if (m1.won == m2.won) {
return m1.lost > m2.lost;
}
return m1.won > m2.won;
}
};
int main() {
vector<Monster> negative;
vector<Monster> positive;
int n;
long long int z;
scanf("%d %lld", &n, &z);
for (int i = 1; i <= n; ++i) {
Monster m;
m.no = i;
scanf("%d %d", &m.lost, &m.won);
if (m.lost >= m.won) {
negative.push_back(m);
} else {
positive.push_back(m);
}
}
sort(positive.begin(), positive.end(), PositiveComp());
sort(negative.begin(), negative.end(), NegativeComp());
for (vector<Monster>::iterator it = positive.begin(); it != positive.end(); ++it) {
z -= it->lost;
if (z <= 0) {
printf("NIE\n");
return 0;
}
z += it->won;
}
for (vector<Monster>::iterator it = negative.begin(); it != negative.end(); ++it) {
z -= it->lost;
if (z <= 0) {
printf("NIE\n");
return 0;
}
z += it->won;
}
printf("TAK\n");
for (vector<Monster>::iterator it = positive.begin(); it != positive.end(); ++it) {
printf("%d ", it->no);
}
for (vector<Monster>::iterator it = negative.begin(); it != negative.end(); ++it) {
printf("%d ", it->no);
}
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 | #include <cstdio> #include <vector> #include <algorithm> using namespace std; struct Monster { int no; int lost; int won; }; struct PositiveComp { public: bool operator()(const Monster& m1, const Monster& m2) { if (m1.lost == m2.lost) { return m1.won > m2.won; } return m1.lost < m2.lost; } }; struct NegativeComp { public: bool operator()(const Monster& m1, const Monster& m2) { if (m1.won == m2.won) { return m1.lost > m2.lost; } return m1.won > m2.won; } }; int main() { vector<Monster> negative; vector<Monster> positive; int n; long long int z; scanf("%d %lld", &n, &z); for (int i = 1; i <= n; ++i) { Monster m; m.no = i; scanf("%d %d", &m.lost, &m.won); if (m.lost >= m.won) { negative.push_back(m); } else { positive.push_back(m); } } sort(positive.begin(), positive.end(), PositiveComp()); sort(negative.begin(), negative.end(), NegativeComp()); for (vector<Monster>::iterator it = positive.begin(); it != positive.end(); ++it) { z -= it->lost; if (z <= 0) { printf("NIE\n"); return 0; } z += it->won; } for (vector<Monster>::iterator it = negative.begin(); it != negative.end(); ++it) { z -= it->lost; if (z <= 0) { printf("NIE\n"); return 0; } z += it->won; } printf("TAK\n"); for (vector<Monster>::iterator it = positive.begin(); it != positive.end(); ++it) { printf("%d ", it->no); } for (vector<Monster>::iterator it = negative.begin(); it != negative.end(); ++it) { printf("%d ", it->no); } return 0; } |
English