#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; } } |
English