#include <bits/stdc++.h> #define lld long long #define pii pair<int,int> #define pll pair<lld,lld> #define mp make_pair #define s second #define f first #define pb push_back #ifdef WIN32 #define gcx getchar() #elif __linux__ #define gcx getchar_unlocked() #endif using namespace std; pll p[1000999]; pll q[1000999]; lld d[1000999]; lld n,T,a,b,c,w1,w2,l,k; bool xd; int main() { scanf("%lld",&T); while(T--){ scanf("%lld",&n); xd=0; w1=0; w2=0; for(int i=0;i<n;++i){ scanf("%lld%lld%lld",&a,&b,&c); w1+=a*b; w2+=a*c; p[i]=mp(b,a); q[i]=mp(c,a); } sort(p,p+n); sort(q,q+n); for(int i=0;i<n;++i) d[i]=p[i].s; if(w1!=w2) { puts("NIE"); continue; } a=0; k=n-1; b=0; for(int i=n-1;i>=0;--i){ //printf("%d potrzebuje %d %d\n",i,q[i].s,q[i].f); while(a+p[k].s<q[i].s){ //printf("dodaje element w calosci %d %d\n",p[k].f,p[k].s); a+=p[k].s; b+=p[k].s*p[k].f; --k; } p[k].s-=(q[i].s-a); b+=(q[i].s-a)*(p[k].f); //printf("dodaje %d elementu %d\n",q[i].s-a,p[k].f); a=0; b-=q[i].f*q[i].s; if(b<0){ xd=1; break; } } if(xd==1){ puts("NIE"); continue; } for(int i=0;i<n;++i) p[i].s=d[i]; a=0; k=0; b=0; for(int i=0;i<n;++i){ while(a+p[k].s<q[i].s){ a+=p[k].s; b+=p[k].s*p[k].f; ++k; } p[k].s-=(q[i].s-a); b+=(q[i].s-a)*(p[k].f); a=0; b-=q[i].f*q[i].s; if(b>0){ xd=1; break; } } if(xd==1){ puts("NIE"); continue; } puts("TAK"); } 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 | #include <bits/stdc++.h> #define lld long long #define pii pair<int,int> #define pll pair<lld,lld> #define mp make_pair #define s second #define f first #define pb push_back #ifdef WIN32 #define gcx getchar() #elif __linux__ #define gcx getchar_unlocked() #endif using namespace std; pll p[1000999]; pll q[1000999]; lld d[1000999]; lld n,T,a,b,c,w1,w2,l,k; bool xd; int main() { scanf("%lld",&T); while(T--){ scanf("%lld",&n); xd=0; w1=0; w2=0; for(int i=0;i<n;++i){ scanf("%lld%lld%lld",&a,&b,&c); w1+=a*b; w2+=a*c; p[i]=mp(b,a); q[i]=mp(c,a); } sort(p,p+n); sort(q,q+n); for(int i=0;i<n;++i) d[i]=p[i].s; if(w1!=w2) { puts("NIE"); continue; } a=0; k=n-1; b=0; for(int i=n-1;i>=0;--i){ //printf("%d potrzebuje %d %d\n",i,q[i].s,q[i].f); while(a+p[k].s<q[i].s){ //printf("dodaje element w calosci %d %d\n",p[k].f,p[k].s); a+=p[k].s; b+=p[k].s*p[k].f; --k; } p[k].s-=(q[i].s-a); b+=(q[i].s-a)*(p[k].f); //printf("dodaje %d elementu %d\n",q[i].s-a,p[k].f); a=0; b-=q[i].f*q[i].s; if(b<0){ xd=1; break; } } if(xd==1){ puts("NIE"); continue; } for(int i=0;i<n;++i) p[i].s=d[i]; a=0; k=0; b=0; for(int i=0;i<n;++i){ while(a+p[k].s<q[i].s){ a+=p[k].s; b+=p[k].s*p[k].f; ++k; } p[k].s-=(q[i].s-a); b+=(q[i].s-a)*(p[k].f); a=0; b-=q[i].f*q[i].s; if(b>0){ xd=1; break; } } if(xd==1){ puts("NIE"); continue; } puts("TAK"); } return 0; } |