#include <iostream> #include <algorithm> using namespace std; pair<int,int> A[100000]; pair<int,int> B[100000]; int main() { int t,n,a,b,c; cin>>t; while(t--){ cin>>n; for(int i =0;i<n;i++){ cin>>a>>b>>c; A[i].first = b; A[i].second = a; B[i].first = c; B[i].second = a; }; sort(A,A+n); sort(B,B+n); //redukuj long long AS = 0,BS = 0; long long AL = 0,BL = 0; bool ok = true; AS = 0; BS = 0; for(int i =0;i<n;i++){ AS += A[i].first*A[i].second; BS += B[i].first*B[i].second; } if(AS!=BS){ ok = false; } AS = 0; BS = 0; int i = n-1; int j = n-1; while(true){ if(A[i].first > B[j].first){ AS += A[i].first*A[i].second; AL += A[i].second; i--; } else if(A[i].first == B[j].first){ // cout<<"R"; AS += A[i].first*A[i].second; AL += A[i].second; BS += B[j].first*B[j].second; BL += B[j].second; i--; j--; } else if(A[i].first < B[j].first){ BS += B[j].first*B[j].second; BL += B[j].second; j--; } // cout<<"AS "<<AS<< "("<<AL<<") BS "<<BS<< "("<<BL<<")\n"; if(AS<BS){ while(i>=0){ if(AL < BL){ if(AL+A[i].second <= BL){ AS += A[i].first*A[i].second; AL += A[i].second; i--; }else{ long long h = BL-AL; AS += A[i].first*(h); AL += h; A[i].second -=h; break; } }else{ break; } // cout<<"AS "<<AS<< "("<<AL<<") BS "<<BS<< "("<<BL<<")\n"; } //cout<<"AS "<<AS<< "("<<AL<<") BS "<<BS<< "("<<BL<<")\n"; if(AS<BS){ ok = false; } } // cout<<"AS "<<AS<< "("<<AL<<") BS "<<BS<< "("<<BL<<")\n"; if(i<0 || j<0)break; } if(ok){ cout<<"TAK\n"; }else{ cout<<"NIE\n"; } } 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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | #include <iostream> #include <algorithm> using namespace std; pair<int,int> A[100000]; pair<int,int> B[100000]; int main() { int t,n,a,b,c; cin>>t; while(t--){ cin>>n; for(int i =0;i<n;i++){ cin>>a>>b>>c; A[i].first = b; A[i].second = a; B[i].first = c; B[i].second = a; }; sort(A,A+n); sort(B,B+n); //redukuj long long AS = 0,BS = 0; long long AL = 0,BL = 0; bool ok = true; AS = 0; BS = 0; for(int i =0;i<n;i++){ AS += A[i].first*A[i].second; BS += B[i].first*B[i].second; } if(AS!=BS){ ok = false; } AS = 0; BS = 0; int i = n-1; int j = n-1; while(true){ if(A[i].first > B[j].first){ AS += A[i].first*A[i].second; AL += A[i].second; i--; } else if(A[i].first == B[j].first){ // cout<<"R"; AS += A[i].first*A[i].second; AL += A[i].second; BS += B[j].first*B[j].second; BL += B[j].second; i--; j--; } else if(A[i].first < B[j].first){ BS += B[j].first*B[j].second; BL += B[j].second; j--; } // cout<<"AS "<<AS<< "("<<AL<<") BS "<<BS<< "("<<BL<<")\n"; if(AS<BS){ while(i>=0){ if(AL < BL){ if(AL+A[i].second <= BL){ AS += A[i].first*A[i].second; AL += A[i].second; i--; }else{ long long h = BL-AL; AS += A[i].first*(h); AL += h; A[i].second -=h; break; } }else{ break; } // cout<<"AS "<<AS<< "("<<AL<<") BS "<<BS<< "("<<BL<<")\n"; } //cout<<"AS "<<AS<< "("<<AL<<") BS "<<BS<< "("<<BL<<")\n"; if(AS<BS){ ok = false; } } // cout<<"AS "<<AS<< "("<<AL<<") BS "<<BS<< "("<<BL<<")\n"; if(i<0 || j<0)break; } if(ok){ cout<<"TAK\n"; }else{ cout<<"NIE\n"; } } return 0; } |