#include <bits/stdc++.h>
#define PB push_back
#define ST first
#define ND second
#define _ ios_base::sync_with_stdio(0); cin.tie(0);
//mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
using namespace std;
using ll = long long;
using pi = pair<int,int>;
using vi = vector<int>;
struct Rect {
int l,a,b;
bool operator < (const Rect&R) const {
return a>R.a;
}
};
const int nax = 100*1000+10;
int t,n;
Rect rect[nax];
Rect rect2[nax];
int main() {_
cin>>t;
while(t--) {
cin>>n;
for(int i=1; i<=n; i++) {
cin>>rect[i].l>>rect[i].a>>rect[i].b;
rect2[i].l=rect[i].l;
rect2[i].a=rect[i].b;
}
sort(rect+1,rect+1+n);
sort(rect2+1,rect2+1+n);
ll tot_l = 0,tot_p=0,L=0,R=0,lenL=0,lenR=0;
int wsk1=0,wsk2=n+1;
bool ans = 1;
for(int i=1; i<=n; i++) {
tot_l+=rect2[i].l;
tot_p+=(ll)rect2[i].l*rect2[i].a;
while(wsk1+1<=n&&lenL+rect[wsk1+1].l<=tot_l) {
lenL+=rect[wsk1+1].l;
L+=(ll)rect[wsk1+1].a*rect[wsk1+1].l;
wsk1++;
}
while(wsk2-1>=1&&lenR+rect[wsk2-1].l<=tot_l) {
lenR+=rect[wsk2-1].l;
R+=(ll)rect[wsk2-1].a*rect[wsk2-1].l;
wsk2--;
}
L+=(ll)(tot_l-lenL)*rect[wsk1+1].a;
R+=(ll)(tot_l-lenR)*rect[wsk2-1].a;
if(tot_p>L) {
ans=0;
}
L-=(ll)(tot_l-lenL)*rect[wsk1+1].a;
R-=(ll)(tot_l-lenR)*rect[wsk2-1].a;
}
if(tot_p!=L) ans=0;
if(ans) 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 | #include <bits/stdc++.h> #define PB push_back #define ST first #define ND second #define _ ios_base::sync_with_stdio(0); cin.tie(0); //mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count()); using namespace std; using ll = long long; using pi = pair<int,int>; using vi = vector<int>; struct Rect { int l,a,b; bool operator < (const Rect&R) const { return a>R.a; } }; const int nax = 100*1000+10; int t,n; Rect rect[nax]; Rect rect2[nax]; int main() {_ cin>>t; while(t--) { cin>>n; for(int i=1; i<=n; i++) { cin>>rect[i].l>>rect[i].a>>rect[i].b; rect2[i].l=rect[i].l; rect2[i].a=rect[i].b; } sort(rect+1,rect+1+n); sort(rect2+1,rect2+1+n); ll tot_l = 0,tot_p=0,L=0,R=0,lenL=0,lenR=0; int wsk1=0,wsk2=n+1; bool ans = 1; for(int i=1; i<=n; i++) { tot_l+=rect2[i].l; tot_p+=(ll)rect2[i].l*rect2[i].a; while(wsk1+1<=n&&lenL+rect[wsk1+1].l<=tot_l) { lenL+=rect[wsk1+1].l; L+=(ll)rect[wsk1+1].a*rect[wsk1+1].l; wsk1++; } while(wsk2-1>=1&&lenR+rect[wsk2-1].l<=tot_l) { lenR+=rect[wsk2-1].l; R+=(ll)rect[wsk2-1].a*rect[wsk2-1].l; wsk2--; } L+=(ll)(tot_l-lenL)*rect[wsk1+1].a; R+=(ll)(tot_l-lenR)*rect[wsk2-1].a; if(tot_p>L) { ans=0; } L-=(ll)(tot_l-lenL)*rect[wsk1+1].a; R-=(ll)(tot_l-lenR)*rect[wsk2-1].a; } if(tot_p!=L) ans=0; if(ans) cout<<"TAK\n"; else cout<<"NIE\n"; } } |
English