#include <bits/stdc++.h> using namespace std; #define int long long main(){ ios_base::sync_with_stdio(0); cin.tie(0); int z; cin >> z; while(z--){ int n; cin >> n; int al = 0; bool ok = 1; vector <int> l(n), a(n), b(n); vector <pair <int,int> > tar(n), h(n); int bal1 = 0, bal2 = 0; for(int i = 0; i < n; ++i){ cin >> l[i] >> a[i] >> b[i]; h[i] = {a[i],l[i]}; bal1 += a[i]*l[i]; tar[i] = {b[i],l[i]}; bal2 += b[i]*l[i]; al += l[i]; } if(bal1 != bal2){ cout <<"NIE\n"; continue; } sort(tar.begin(), tar.end()); sort(h.begin(), h.end()); { vector <pair <int,int> > h2 = h, tar2 = tar; int p1 = 0, p2 = 0, ll = 0; int m1 = 0, m2 = 0; while(ll < al){ int w = min(h2[p1].second,tar2[p2].second); ll += w; m1 += w*h2[p1].first; m2 += w*tar2[p2].first; if(m2 < m1)ok = 0; h2[p1].second -= w; tar2[p2].second -= w; if(h2[p1].second == 0)++p1; if(tar2[p2].second == 0)++p2; } } { vector <pair <int,int> > h2 = h, tar2 = tar; reverse(h2.begin(),h2.end()); reverse(tar2.begin(),tar2.end()); int p1 = 0, p2 = 0, ll = 0; int m1 = 0, m2 = 0; while(ll < al){ int w = min(h2[p1].second, tar2[p2].second); ll += w; m1 += w*h2[p1].first; m2 += w*tar2[p2].first; if(m2 > m1)ok = 0; h2[p1].second -= w; tar2[p2].second -= w; if(h2[p1].second == 0)++p1; if(tar2[p2].second == 0)++p2; } } if(ok)cout <<"TAK\n"; else cout <<"NIE\n"; } }
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 | #include <bits/stdc++.h> using namespace std; #define int long long main(){ ios_base::sync_with_stdio(0); cin.tie(0); int z; cin >> z; while(z--){ int n; cin >> n; int al = 0; bool ok = 1; vector <int> l(n), a(n), b(n); vector <pair <int,int> > tar(n), h(n); int bal1 = 0, bal2 = 0; for(int i = 0; i < n; ++i){ cin >> l[i] >> a[i] >> b[i]; h[i] = {a[i],l[i]}; bal1 += a[i]*l[i]; tar[i] = {b[i],l[i]}; bal2 += b[i]*l[i]; al += l[i]; } if(bal1 != bal2){ cout <<"NIE\n"; continue; } sort(tar.begin(), tar.end()); sort(h.begin(), h.end()); { vector <pair <int,int> > h2 = h, tar2 = tar; int p1 = 0, p2 = 0, ll = 0; int m1 = 0, m2 = 0; while(ll < al){ int w = min(h2[p1].second,tar2[p2].second); ll += w; m1 += w*h2[p1].first; m2 += w*tar2[p2].first; if(m2 < m1)ok = 0; h2[p1].second -= w; tar2[p2].second -= w; if(h2[p1].second == 0)++p1; if(tar2[p2].second == 0)++p2; } } { vector <pair <int,int> > h2 = h, tar2 = tar; reverse(h2.begin(),h2.end()); reverse(tar2.begin(),tar2.end()); int p1 = 0, p2 = 0, ll = 0; int m1 = 0, m2 = 0; while(ll < al){ int w = min(h2[p1].second, tar2[p2].second); ll += w; m1 += w*h2[p1].first; m2 += w*tar2[p2].first; if(m2 > m1)ok = 0; h2[p1].second -= w; tar2[p2].second -= w; if(h2[p1].second == 0)++p1; if(tar2[p2].second == 0)++p2; } } if(ok)cout <<"TAK\n"; else cout <<"NIE\n"; } } |