#include <algorithm>
#include <cstdio>
#include <vector>
int main() {
int t, n;
long long int l, a, b;
scanf("%d", &t);
for (int i = 0; i < t; i++) {
std::vector<std::pair<long long int, long long int>> av;
std::vector<std::pair<long long int, long long int>> bv;
scanf("%d", &n);
for (int j = 0; j < n; j++) {
scanf("%lld %lld %lld", &l, &a, &b);
av.push_back(std::make_pair(a, l));
bv.push_back(std::make_pair(b, l));
}
std::sort(av.begin(), av.end());
std::sort(bv.begin(), bv.end());
long long int la = 0;
long long int lb = 0;
long long int ha = 0;
long long int hb = 0;
long long int pos = 0;
int idx_a = 0;
int idx_b = 0;
bool was_break = false;
for (int k = 0; k < 2 * n - 1; k++) {
if (la + av[idx_a].second <= lb + bv[idx_b].second) {
la = la + av[idx_a].second;
ha += (std::max(la, lb) - pos) * av[idx_a].first;
hb += (std::max(la, lb) - pos) * bv[idx_b].first;
idx_a += 1;
} else {
lb = lb + bv[idx_b].second;
ha += (std::max(la, lb) - pos) * av[idx_a].first;
hb += (std::max(la, lb) - pos) * bv[idx_b].first;
idx_b += 1;
}
if (ha > hb) {
was_break = true;
break;
}
pos = std::max(la, lb);
}
if (ha > hb || (ha != hb && !was_break)) {
printf("NIE\n");
} else {
printf("TAK\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 | #include <algorithm> #include <cstdio> #include <vector> int main() { int t, n; long long int l, a, b; scanf("%d", &t); for (int i = 0; i < t; i++) { std::vector<std::pair<long long int, long long int>> av; std::vector<std::pair<long long int, long long int>> bv; scanf("%d", &n); for (int j = 0; j < n; j++) { scanf("%lld %lld %lld", &l, &a, &b); av.push_back(std::make_pair(a, l)); bv.push_back(std::make_pair(b, l)); } std::sort(av.begin(), av.end()); std::sort(bv.begin(), bv.end()); long long int la = 0; long long int lb = 0; long long int ha = 0; long long int hb = 0; long long int pos = 0; int idx_a = 0; int idx_b = 0; bool was_break = false; for (int k = 0; k < 2 * n - 1; k++) { if (la + av[idx_a].second <= lb + bv[idx_b].second) { la = la + av[idx_a].second; ha += (std::max(la, lb) - pos) * av[idx_a].first; hb += (std::max(la, lb) - pos) * bv[idx_b].first; idx_a += 1; } else { lb = lb + bv[idx_b].second; ha += (std::max(la, lb) - pos) * av[idx_a].first; hb += (std::max(la, lb) - pos) * bv[idx_b].first; idx_b += 1; } if (ha > hb) { was_break = true; break; } pos = std::max(la, lb); } if (ha > hb || (ha != hb && !was_break)) { printf("NIE\n"); } else { printf("TAK\n"); } } return 0; } |
English