#include<bits/stdc++.h>
#define FOR(i,a,b) for(int i=a;i<b;++i)
#define FORD(i,a,b) for(int i=a;i>=b;--i)
#define PB push_back
#define FI first
#define SE second
#define umap unordered_map
#define uset unordered_set
#define vi vector<ll>
#define vvi vector<vi>
#define pii pair<int, int>
#define ALL(X) (X).begin(),(X).end()
#ifndef DEBUG
#define endl (char)10
#endif
using namespace std;
using ll = long long;
using ld = long double;
const string NIE = "NIE";
const string TAK = "TAK";
struct kubek {
ll l, a, b;
bool operator< (const kubek& o) const {
return a < o.a;
}
};
struct kubek2 {
ll l, a, b;
bool operator< (const kubek2& o) const {
return b < o.b;
}
};
void st() {
int n;
cin >> n;
ll bilans = 0;
vector<kubek> d;
vector<kubek2> g;
FOR(i,0,n) {
ll a, b, c;
cin >> a >> b >> c;
bilans += a * (b - c);
if (b < c) d.PB({a, b, c});
if (b > c) g.PB({a, b, c});
}
if (bilans != 0){
//cerr << "Bo bilans zly." << endl;
cout << NIE << endl;
return;
}
sort(ALL(d));
sort(ALL(g));
ll pe = 0, se = 0;
FOR(i,0,g.size()) pe += g[i].l * (g[i].a - g[i].b);
ll we = 0;
int wsk = 0;
ll pt = 0, ce;
FOR(i,0,d.size()){
ce = d[i].l * (d[i].b - d[i].a);
we += ce;
while(wsk < g.size() && g[wsk].b < d[i].a) wsk++;
se += (d[i].a - pt) * wsk;
pt = d[i].a;
if (we < se || ce > pe - se){
cout << NIE << endl;
return;
}
}
cout << TAK << endl;
}
int main () {
ios_base::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
while(t--){
st();
}
}
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 | #include<bits/stdc++.h> #define FOR(i,a,b) for(int i=a;i<b;++i) #define FORD(i,a,b) for(int i=a;i>=b;--i) #define PB push_back #define FI first #define SE second #define umap unordered_map #define uset unordered_set #define vi vector<ll> #define vvi vector<vi> #define pii pair<int, int> #define ALL(X) (X).begin(),(X).end() #ifndef DEBUG #define endl (char)10 #endif using namespace std; using ll = long long; using ld = long double; const string NIE = "NIE"; const string TAK = "TAK"; struct kubek { ll l, a, b; bool operator< (const kubek& o) const { return a < o.a; } }; struct kubek2 { ll l, a, b; bool operator< (const kubek2& o) const { return b < o.b; } }; void st() { int n; cin >> n; ll bilans = 0; vector<kubek> d; vector<kubek2> g; FOR(i,0,n) { ll a, b, c; cin >> a >> b >> c; bilans += a * (b - c); if (b < c) d.PB({a, b, c}); if (b > c) g.PB({a, b, c}); } if (bilans != 0){ //cerr << "Bo bilans zly." << endl; cout << NIE << endl; return; } sort(ALL(d)); sort(ALL(g)); ll pe = 0, se = 0; FOR(i,0,g.size()) pe += g[i].l * (g[i].a - g[i].b); ll we = 0; int wsk = 0; ll pt = 0, ce; FOR(i,0,d.size()){ ce = d[i].l * (d[i].b - d[i].a); we += ce; while(wsk < g.size() && g[wsk].b < d[i].a) wsk++; se += (d[i].a - pt) * wsk; pt = d[i].a; if (we < se || ce > pe - se){ cout << NIE << endl; return; } } cout << TAK << endl; } int main () { ios_base::sync_with_stdio(false); cin.tie(0); int t; cin >> t; while(t--){ st(); } } |
English