#include <algorithm> #include <cstdio> using namespace std; typedef long long LL; const int N = 1e5 + 1; pair<LL, LL> at[N]; pair<LL, LL> bt[N]; pair<LL, LL> atp[2 * N]; pair<LL, LL> btp[2 * N]; void solve() { int n = 0; LL l, a, b; scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%lld %lld %lld", &l, &a, &b); at[i].second = bt[i].second = l; at[i].first = a; bt[i].first = b; } sort(at, at + n); sort(bt, bt + n); int ia = 0, ib = 0; int ac = 0, bc = 0; while (ia < n && ib < n) { if (at[ia].second == bt[ib].second) { atp[ac++] = at[ia]; btp[bc++] = bt[ib]; ++ia, ++ib; } else if (at[ia].second < bt[ib].second) { atp[ac++] = at[ia]; btp[bc].first = bt[ib].first; btp[bc++].second = at[ia].second; bt[ib].second -= at[ia].second; ++ia; } else { btp[bc++] = bt[ib]; atp[ac].first = at[ia].first; atp[ac++].second = bt[ib].second; at[ia].second -= bt[ib].second; ++ib; } } if (ia < n) { atp[ac++] = at[ia]; } if (ib < n) { btp[bc++] = bt[ib]; } LL sum1 = 0, sum2 = 0; for (int i = 0; i < ac; ++i) { sum1 += atp[i].first * atp[i].second; sum2 += btp[i].first * btp[i].second; if (sum1 > sum2) { printf("NIE\n"); return; } } sum1 = 0; sum2 = 0; for (int i = ac - 1; i >= 0; --i) { sum1 += atp[i].first * atp[i].second; sum2 += btp[i].first * btp[i].second; if (sum1 < sum2) { printf("NIE\n"); return; } } printf("TAK\n"); return; } int main() { int t = 0; scanf("%d", &t); while (t--) { solve(); } }
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 83 | #include <algorithm> #include <cstdio> using namespace std; typedef long long LL; const int N = 1e5 + 1; pair<LL, LL> at[N]; pair<LL, LL> bt[N]; pair<LL, LL> atp[2 * N]; pair<LL, LL> btp[2 * N]; void solve() { int n = 0; LL l, a, b; scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%lld %lld %lld", &l, &a, &b); at[i].second = bt[i].second = l; at[i].first = a; bt[i].first = b; } sort(at, at + n); sort(bt, bt + n); int ia = 0, ib = 0; int ac = 0, bc = 0; while (ia < n && ib < n) { if (at[ia].second == bt[ib].second) { atp[ac++] = at[ia]; btp[bc++] = bt[ib]; ++ia, ++ib; } else if (at[ia].second < bt[ib].second) { atp[ac++] = at[ia]; btp[bc].first = bt[ib].first; btp[bc++].second = at[ia].second; bt[ib].second -= at[ia].second; ++ia; } else { btp[bc++] = bt[ib]; atp[ac].first = at[ia].first; atp[ac++].second = bt[ib].second; at[ia].second -= bt[ib].second; ++ib; } } if (ia < n) { atp[ac++] = at[ia]; } if (ib < n) { btp[bc++] = bt[ib]; } LL sum1 = 0, sum2 = 0; for (int i = 0; i < ac; ++i) { sum1 += atp[i].first * atp[i].second; sum2 += btp[i].first * btp[i].second; if (sum1 > sum2) { printf("NIE\n"); return; } } sum1 = 0; sum2 = 0; for (int i = ac - 1; i >= 0; --i) { sum1 += atp[i].first * atp[i].second; sum2 += btp[i].first * btp[i].second; if (sum1 < sum2) { printf("NIE\n"); return; } } printf("TAK\n"); return; } int main() { int t = 0; scanf("%d", &t); while (t--) { solve(); } } |