#include <stdio.h>
#include <vector>
#include <tuple>
#include <algorithm>
using namespace std;
typedef int I;
typedef tuple<I,I,I> E;
typedef vector<E> V;
inline bool check(I z, const V& add, const V& sub) {
for (const E& e : add) {
if (get<0>(e) >= z) {
return false;
}
z += (get<2>(e) - get<0>(e));
}
for (const E& e : sub) {
if (z <= get<2>(e)) {
return false;
}
z -= (get<0>(e) + get<2>(e));
}
return true;
}
inline void print(const V& v, bool& ns) {
for (const E& e : v) {
if (ns)
ns = false;
else
printf(" ");
printf("%d", get<1>(e));
}
}
int main() {
I nn, z;
scanf("%d %d\n", &nn, &z);
V add, sub;
add.reserve(nn);
sub.reserve(nn);
for (I n=0; n<nn; ++n) {
I d, a;
scanf("%d %d\n", &d, &a);
if (a >= d)
add.push_back(E(d, n+1, a));
else
sub.push_back(E(-a, n+1, d));
}
sort(add.begin(), add.end());
sort(sub.begin(), sub.end());
if (check(z, add, sub)) {
printf("TAK\n");
bool ns = true;
print(add, ns);
print(sub, ns);
printf("\n");
} else {
printf("NIE\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 | #include <stdio.h> #include <vector> #include <tuple> #include <algorithm> using namespace std; typedef int I; typedef tuple<I,I,I> E; typedef vector<E> V; inline bool check(I z, const V& add, const V& sub) { for (const E& e : add) { if (get<0>(e) >= z) { return false; } z += (get<2>(e) - get<0>(e)); } for (const E& e : sub) { if (z <= get<2>(e)) { return false; } z -= (get<0>(e) + get<2>(e)); } return true; } inline void print(const V& v, bool& ns) { for (const E& e : v) { if (ns) ns = false; else printf(" "); printf("%d", get<1>(e)); } } int main() { I nn, z; scanf("%d %d\n", &nn, &z); V add, sub; add.reserve(nn); sub.reserve(nn); for (I n=0; n<nn; ++n) { I d, a; scanf("%d %d\n", &d, &a); if (a >= d) add.push_back(E(d, n+1, a)); else sub.push_back(E(-a, n+1, d)); } sort(add.begin(), add.end()); sort(sub.begin(), sub.end()); if (check(z, add, sub)) { printf("TAK\n"); bool ns = true; print(add, ns); print(sub, ns); printf("\n"); } else { printf("NIE\n"); } return 0; } |
English