#include <bits/stdc++.h> #define st first #define nd second using namespace std; long long l,a,b,sum1[100009],sum2[100009],wartosc,ile,waga,oczekwaga,oczek,n,tt,nie,suma,SUMAXD; pair <long long,long long> T[100006],t[100006]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> tt; for(int ii=0;ii<tt;ii++) { cin >> n; ile=-1; nie=0; waga=0; oczekwaga=0; oczek=0; wartosc=0; suma=0; SUMAXD=0; for(int i=0;i<n;i++) { cin >> l >> a >> b; t[i]={a,l}; suma+=a*l; T[i]={b,l}; SUMAXD+=b*l; } sort(t,t+n); sort(T,T+n); t[n].st=0; T[n].st=0; ile=-1; for(int i=0;i<n;i++) { oczek+=T[i].st*T[i].nd; oczekwaga+=T[i].nd; while((waga<oczekwaga)&&(ile<n)) { ile++; //cout << "XD"; waga+=t[ile].nd; wartosc+=t[ile].st*t[ile].nd; } if(ile==-1) waga-=t[ile].nd; wartosc-=t[ile].st*t[ile].nd; wartosc+=(oczekwaga-waga)*t[ile].st; if(wartosc>oczek) nie=1; //cout << waga <<" "<<wartosc <<" "<<oczekwaga<<" "<<oczek<<" "<<ile<<endl; wartosc-=(oczekwaga-waga)*t[ile].st; ile--; } for(int i=0;i<n;i++) { t[i].st=-t[i].st; T[i].st=-T[i].st; } sort(t,t+n); sort(T,T+n); //cout << endl; ile=-1; waga=0; oczekwaga=0; oczek=0; wartosc=0; for(int i=0;i<n;i++) { oczek+=-T[i].st*T[i].nd; oczekwaga+=T[i].nd; while((waga<oczekwaga)&&(ile<n)) { ile++; //cout << "XD"; waga+=t[ile].nd; wartosc+=-t[ile].st*t[ile].nd; } waga-=t[ile].nd; wartosc-=-t[ile].st*t[ile].nd; wartosc+=-(oczekwaga-waga)*t[ile].st; if(wartosc<oczek) nie=1; //cout << waga <<" "<<wartosc <<" "<<oczekwaga<<" "<<oczek<<" "<<ile<<endl; wartosc-=-(oczekwaga-waga)*t[ile].st; ile--; } if((nie==1)||(SUMAXD!=suma)) {cout << "NIE"<<endl; //cout << SUMA <<" "<<suma<<endl; } else cout << "TAK"<<endl; } }
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 98 99 100 101 102 103 104 | #include <bits/stdc++.h> #define st first #define nd second using namespace std; long long l,a,b,sum1[100009],sum2[100009],wartosc,ile,waga,oczekwaga,oczek,n,tt,nie,suma,SUMAXD; pair <long long,long long> T[100006],t[100006]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> tt; for(int ii=0;ii<tt;ii++) { cin >> n; ile=-1; nie=0; waga=0; oczekwaga=0; oczek=0; wartosc=0; suma=0; SUMAXD=0; for(int i=0;i<n;i++) { cin >> l >> a >> b; t[i]={a,l}; suma+=a*l; T[i]={b,l}; SUMAXD+=b*l; } sort(t,t+n); sort(T,T+n); t[n].st=0; T[n].st=0; ile=-1; for(int i=0;i<n;i++) { oczek+=T[i].st*T[i].nd; oczekwaga+=T[i].nd; while((waga<oczekwaga)&&(ile<n)) { ile++; //cout << "XD"; waga+=t[ile].nd; wartosc+=t[ile].st*t[ile].nd; } if(ile==-1) waga-=t[ile].nd; wartosc-=t[ile].st*t[ile].nd; wartosc+=(oczekwaga-waga)*t[ile].st; if(wartosc>oczek) nie=1; //cout << waga <<" "<<wartosc <<" "<<oczekwaga<<" "<<oczek<<" "<<ile<<endl; wartosc-=(oczekwaga-waga)*t[ile].st; ile--; } for(int i=0;i<n;i++) { t[i].st=-t[i].st; T[i].st=-T[i].st; } sort(t,t+n); sort(T,T+n); //cout << endl; ile=-1; waga=0; oczekwaga=0; oczek=0; wartosc=0; for(int i=0;i<n;i++) { oczek+=-T[i].st*T[i].nd; oczekwaga+=T[i].nd; while((waga<oczekwaga)&&(ile<n)) { ile++; //cout << "XD"; waga+=t[ile].nd; wartosc+=-t[ile].st*t[ile].nd; } waga-=t[ile].nd; wartosc-=-t[ile].st*t[ile].nd; wartosc+=-(oczekwaga-waga)*t[ile].st; if(wartosc<oczek) nie=1; //cout << waga <<" "<<wartosc <<" "<<oczekwaga<<" "<<oczek<<" "<<ile<<endl; wartosc-=-(oczekwaga-waga)*t[ile].st; ile--; } if((nie==1)||(SUMAXD!=suma)) {cout << "NIE"<<endl; //cout << SUMA <<" "<<suma<<endl; } else cout << "TAK"<<endl; } } |