#include<bits/stdc++.h> #define st first #define nd second using namespace std; const int N=100005; const long double eps=1e-7; pair<int, int> tab[N], tab2[N]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int q; cin>>q; while(q--){ int n, wsk1, wsk2; cin>>n; long long s1=0, s2=0; for(int i=0; i<n; i++){ cin>>tab[i].nd>>tab[i].st>>tab2[i].st; tab2[i].nd=tab[i].nd; s1+=tab[i].st*(long long)tab[i].nd; s2+=tab2[i].st*(long long)tab2[i].nd; } if(s1!=s2){ cout<<"NIE\n"; continue; } sort(tab, tab+n); sort(tab2, tab2+n); bool b=1; wsk1=n-2; wsk2=n-1; long double v1=tab[n-1].nd; long double q1=tab[n-1].st*v1; while(wsk1>=0 or wsk2>=0){ //cout<<q1<<" "<<v1<<"\n"; if(wsk1<0){ //cout<<"\n\n\n"; //cout<<t; while(wsk2+1){ if(q1!=v1*tab2[wsk2--].st){ b=0; } } break; } if(tab2[wsk2].st*v1>q1 and tab2[wsk2].st>tab[wsk1].st){ b=0; break; } //cout<<"a"; long long v2=tab[wsk1].nd, v=tab2[wsk2].nd, t2=tab[wsk1].st; long long q2=tab[wsk1].st*tab[wsk1].nd, q=tab2[wsk2].st*tab2[wsk2].nd; wsk1--; while(tab[wsk1].st==t2 and wsk1+1){ q2+=tab[wsk1].st*tab[wsk1].nd; wsk1--; } if((q1+q2)*v>(v1+v2)*q){ q1=q1+q2; v1=v1+v2; continue; } //cout<<"b"; if(v1+v2<v){ b=0; break; } // cout<<"c"; if(q1+q2<q){ b=0; break; } wsk2--; q1=q1+q2-q; v1=v1+v2-v; //cout<<"d"; } if(b){ 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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | #include<bits/stdc++.h> #define st first #define nd second using namespace std; const int N=100005; const long double eps=1e-7; pair<int, int> tab[N], tab2[N]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int q; cin>>q; while(q--){ int n, wsk1, wsk2; cin>>n; long long s1=0, s2=0; for(int i=0; i<n; i++){ cin>>tab[i].nd>>tab[i].st>>tab2[i].st; tab2[i].nd=tab[i].nd; s1+=tab[i].st*(long long)tab[i].nd; s2+=tab2[i].st*(long long)tab2[i].nd; } if(s1!=s2){ cout<<"NIE\n"; continue; } sort(tab, tab+n); sort(tab2, tab2+n); bool b=1; wsk1=n-2; wsk2=n-1; long double v1=tab[n-1].nd; long double q1=tab[n-1].st*v1; while(wsk1>=0 or wsk2>=0){ //cout<<q1<<" "<<v1<<"\n"; if(wsk1<0){ //cout<<"\n\n\n"; //cout<<t; while(wsk2+1){ if(q1!=v1*tab2[wsk2--].st){ b=0; } } break; } if(tab2[wsk2].st*v1>q1 and tab2[wsk2].st>tab[wsk1].st){ b=0; break; } //cout<<"a"; long long v2=tab[wsk1].nd, v=tab2[wsk2].nd, t2=tab[wsk1].st; long long q2=tab[wsk1].st*tab[wsk1].nd, q=tab2[wsk2].st*tab2[wsk2].nd; wsk1--; while(tab[wsk1].st==t2 and wsk1+1){ q2+=tab[wsk1].st*tab[wsk1].nd; wsk1--; } if((q1+q2)*v>(v1+v2)*q){ q1=q1+q2; v1=v1+v2; continue; } //cout<<"b"; if(v1+v2<v){ b=0; break; } // cout<<"c"; if(q1+q2<q){ b=0; break; } wsk2--; q1=q1+q2-q; v1=v1+v2-v; //cout<<"d"; } if(b){ cout<<"TAK\n"; } else{ cout<<"NIE\n"; } } } |