#include <bits/stdc++.h>
using namespace std;
const int INF = 2e9;
bool solve() {
int n, a, b, l;
cin >> n;
vector <pair <long long, long long>> al_read;
vector <pair <long long, long long>> al;
vector <pair <long long, long long>> bl;
long long suma = 0, sumb = 0;
for (int i = 0; i < n; i++) {
cin >> l >> a >> b;
suma += l * a;
sumb += l * b;
al_read.push_back(make_pair(a, l));
bl.push_back(make_pair(b, l));
}
if (suma != sumb) {
return false;
}
sort(al_read.begin(), al_read.end());
sort(bl.begin(), bl.end());
al = al_read;
long long prefa = 0;
long long prefb = 0;
long long sum_pref_a = 0;
long long sum_pref_b = 0;
int j = 0;
for (int i = 0; i < n; i++) {
sum_pref_b += bl[i].second * bl[i].first;
prefb += bl[i].second;
while(prefa < prefb && prefa + al[j].second <= prefb) {
prefa += al[j].second;
sum_pref_a += al[j].second * al[j].first;
j++;
}
sum_pref_a += (prefb - prefa) * al[j].first;
al[j].second -= (prefb - prefa);
prefa = prefb;
if (sum_pref_a > sum_pref_b) {
return false;
}
}
al = al_read;
long long sufa = 0;
long long sufb = 0;
long long sum_suf_a = 0;
long long sum_suf_b = 0;
j = n - 1;
for (int i = n - 1; i >= 0; i--) {
sum_suf_b += bl[i].second * bl[i].first;
sufb += bl[i].second;
while(sufa < sufb && sufa + al[j].second <= sufb) {
sufa += al[j].second;
sum_suf_a += al[j].second * al[j].first;
j--;
}
sum_suf_a += (sufb - sufa) * al[j].first;
al[j].second -= (sufb - sufa);
sufa = sufb;
if (sum_suf_a < sum_suf_b) {
return false;
}
}
return true;
}
int main() {
int t;
cin >> t;
while (t--) {
cout << (solve() ? "TAK" : "NIE") << endl;
}
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 | #include <bits/stdc++.h> using namespace std; const int INF = 2e9; bool solve() { int n, a, b, l; cin >> n; vector <pair <long long, long long>> al_read; vector <pair <long long, long long>> al; vector <pair <long long, long long>> bl; long long suma = 0, sumb = 0; for (int i = 0; i < n; i++) { cin >> l >> a >> b; suma += l * a; sumb += l * b; al_read.push_back(make_pair(a, l)); bl.push_back(make_pair(b, l)); } if (suma != sumb) { return false; } sort(al_read.begin(), al_read.end()); sort(bl.begin(), bl.end()); al = al_read; long long prefa = 0; long long prefb = 0; long long sum_pref_a = 0; long long sum_pref_b = 0; int j = 0; for (int i = 0; i < n; i++) { sum_pref_b += bl[i].second * bl[i].first; prefb += bl[i].second; while(prefa < prefb && prefa + al[j].second <= prefb) { prefa += al[j].second; sum_pref_a += al[j].second * al[j].first; j++; } sum_pref_a += (prefb - prefa) * al[j].first; al[j].second -= (prefb - prefa); prefa = prefb; if (sum_pref_a > sum_pref_b) { return false; } } al = al_read; long long sufa = 0; long long sufb = 0; long long sum_suf_a = 0; long long sum_suf_b = 0; j = n - 1; for (int i = n - 1; i >= 0; i--) { sum_suf_b += bl[i].second * bl[i].first; sufb += bl[i].second; while(sufa < sufb && sufa + al[j].second <= sufb) { sufa += al[j].second; sum_suf_a += al[j].second * al[j].first; j--; } sum_suf_a += (sufb - sufa) * al[j].first; al[j].second -= (sufb - sufa); sufa = sufb; if (sum_suf_a < sum_suf_b) { return false; } } return true; } int main() { int t; cin >> t; while (t--) { cout << (solve() ? "TAK" : "NIE") << endl; } return 0; } |
English