#include <cstdio>
#include <cstdlib>
#include <vector>
#include <map>
#include <queue>
#include <algorithm>
using namespace std;
int read() { int n; scanf("%d", &n); return n; }
const int MAXN = 100000 + 9;
typedef long long ll;
struct Node {
ll temp;
ll litr;
bool operator<(const Node &oth) const {
if (temp != oth.temp) return temp < oth.temp;
return litr < oth.litr;
}
};
bool solve() {
int n = read();
ll pota = 0;
ll potb = 0;
vector<Node> va(n);
vector<Node> vb(n);
for (int i=0; i<n; ++i) {
ll l = read();
ll a = read();
ll b = read();
pota += l * a;
potb += l * b;
va[i].litr = vb[i].litr = l;
va[i].temp = a;
vb[i].temp = b;
}
if (pota != potb) return false;
sort(va.begin(), va.end());
sort(vb.begin(), vb.end());
ll l = 0;
ll p = 0;
int i = n - 1;
for (int j=n-1; j>=0; --j) {
ll tl = vb[j].litr;
ll tt = vb[j].temp;
while (l < tl) {
ll l2 = l + va[i].litr;
ll p2 = p + va[i].litr * va[i].temp;
if (l2 <= tl) {
l = l2;
p = p2;
--i;
continue;
}
ll dl = tl - l;
va[i].litr -= dl;
l += dl;
p += dl * va[i].temp;
}
if (p < l * tt) return false;
p -= l * tt;
l = 0;
}
return true;
}
int main() {
int t = read();
while (t--) {
bool res = solve();
printf("%s\n", res ? "TAK" : "NIE");
}
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 83 84 85 86 87 88 89 90 91 92 | #include <cstdio> #include <cstdlib> #include <vector> #include <map> #include <queue> #include <algorithm> using namespace std; int read() { int n; scanf("%d", &n); return n; } const int MAXN = 100000 + 9; typedef long long ll; struct Node { ll temp; ll litr; bool operator<(const Node &oth) const { if (temp != oth.temp) return temp < oth.temp; return litr < oth.litr; } }; bool solve() { int n = read(); ll pota = 0; ll potb = 0; vector<Node> va(n); vector<Node> vb(n); for (int i=0; i<n; ++i) { ll l = read(); ll a = read(); ll b = read(); pota += l * a; potb += l * b; va[i].litr = vb[i].litr = l; va[i].temp = a; vb[i].temp = b; } if (pota != potb) return false; sort(va.begin(), va.end()); sort(vb.begin(), vb.end()); ll l = 0; ll p = 0; int i = n - 1; for (int j=n-1; j>=0; --j) { ll tl = vb[j].litr; ll tt = vb[j].temp; while (l < tl) { ll l2 = l + va[i].litr; ll p2 = p + va[i].litr * va[i].temp; if (l2 <= tl) { l = l2; p = p2; --i; continue; } ll dl = tl - l; va[i].litr -= dl; l += dl; p += dl * va[i].temp; } if (p < l * tt) return false; p -= l * tt; l = 0; } return true; } int main() { int t = read(); while (t--) { bool res = solve(); printf("%s\n", res ? "TAK" : "NIE"); } return 0; } |
English