#include <bits/stdc++.h>
using namespace std;
typedef long long int LL;
#define st first
#define nd second
#define PII pair <int, int>
const int N = 1e5 + 7;
int n;
int l[N], a[N], b[N];
bool ok(vector <PII> fa, vector <PII> fb){
reverse(fa.begin(), fa.end());
reverse(fb.begin(), fb.end());
LL bal = 0;
while(fa.size() && fb.size()){
auto ta = fa.back();
auto tb = fb.back();
fa.pop_back();
fb.pop_back();
int sz = min(ta.nd, tb.nd);
bal += 1LL * sz * (tb.st - ta.st);
if(bal < 0)
return false;
ta.nd -= sz;
tb.nd -= sz;
if(ta.nd)
fa.push_back(ta);
if(tb.nd)
fb.push_back(tb);
}
return bal == 0;
}
bool check(){
LL bal = 0;
vector <pair <int, int> > cur;
vector <pair <int, int> > cur2;
for(int i = 1; i <= n; ++i){
bal += 1LL * l[i] * (a[i] - b[i]);
cur.push_back({a[i], l[i]});
cur2.push_back({b[i], l[i]});
}
if(bal != 0)
return false;
sort(cur.begin(), cur.end());
sort(cur2.begin(), cur2.end());
if(!ok(cur, cur2))
return false;
reverse(cur.begin(), cur.end());
reverse(cur2.begin(), cur2.end());
if(!ok(cur2, cur))
return false;
return true;
}
void solve(){
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
scanf("%d %d %d", &l[i], &a[i], &b[i]);
puts(check() ? "TAK" : "NIE");
}
int main(){
int cases;
scanf("%d", &cases);
while(cases--)
solve();
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 | #include <bits/stdc++.h> using namespace std; typedef long long int LL; #define st first #define nd second #define PII pair <int, int> const int N = 1e5 + 7; int n; int l[N], a[N], b[N]; bool ok(vector <PII> fa, vector <PII> fb){ reverse(fa.begin(), fa.end()); reverse(fb.begin(), fb.end()); LL bal = 0; while(fa.size() && fb.size()){ auto ta = fa.back(); auto tb = fb.back(); fa.pop_back(); fb.pop_back(); int sz = min(ta.nd, tb.nd); bal += 1LL * sz * (tb.st - ta.st); if(bal < 0) return false; ta.nd -= sz; tb.nd -= sz; if(ta.nd) fa.push_back(ta); if(tb.nd) fb.push_back(tb); } return bal == 0; } bool check(){ LL bal = 0; vector <pair <int, int> > cur; vector <pair <int, int> > cur2; for(int i = 1; i <= n; ++i){ bal += 1LL * l[i] * (a[i] - b[i]); cur.push_back({a[i], l[i]}); cur2.push_back({b[i], l[i]}); } if(bal != 0) return false; sort(cur.begin(), cur.end()); sort(cur2.begin(), cur2.end()); if(!ok(cur, cur2)) return false; reverse(cur.begin(), cur.end()); reverse(cur2.begin(), cur2.end()); if(!ok(cur2, cur)) return false; return true; } void solve(){ scanf("%d", &n); for(int i = 1; i <= n; ++i) scanf("%d %d %d", &l[i], &a[i], &b[i]); puts(check() ? "TAK" : "NIE"); } int main(){ int cases; scanf("%d", &cases); while(cases--) solve(); return 0; } |
English