#include <iostream> #include <algorithm> using namespace std; string doit() { int t,ep=0,ek=0;cin>>t; pair<int, double> kon[t]; pair<int, double> pocz[t]; for(int i=0;i<t;i++){ cin>>pocz[i].second>>pocz[i].first>>kon[i].first; kon[i].second=pocz[i].second; } sort(kon,kon+t); sort(pocz,pocz+t); for(int i=0;i<t;i++){ ep+=pocz[i].first*int(pocz[i].second); ek+=kon[i].first*int(kon[i].second); } if(ep!=ek){return "NIE\n";} int pw=t-1,pm=t-1,kt=t-1; while(kon[0].second>0.0&&kt>-1&&kon[kt].first<=pocz[pw].first){ while(pm>-1&&pocz[pm].first>kon[kt].first){pm--;} if(pm<0){break;} if(kon[kt].first==pocz[pw].first){ double ppp=min(kon[kt].second,pocz[pw].second); kon[kt].second-=ppp; pocz[pw].second-=ppp; if(kon[kt].second<0.0000001){kon[kt].second=0.0;kt--;} if(pocz[pw].second<0.0000001){pocz[pw].second=0.0;pw--;} } else if(kon[kt].first==pocz[pm].first){ double ppp=min(kon[kt].second,pocz[pm].second); kon[kt].second-=ppp; pocz[pm].second-=ppp; if(kon[kt].second<0.0000001){kon[kt].second=0.0;kt--;} if(pocz[pm].second<0.0000001){pocz[pm].second=0.0;pm--;} } else{ double st1=double(kon[kt].first-pocz[pm].first)/double(pocz[pw].first-pocz[pm].first); double st2=1.0-st1; double warpm=pocz[pm].second-(kon[kt].second*st2),warpw=pocz[pw].second-(kon[kt].second*st1); if(warpm<0.0&&warpw<0.0){ if( ((pocz[pm].second*st1)/st2) > pocz[pw].second){ kon[kt].second-=pocz[pw].second/st1; pocz[pm].second-=(pocz[pw].second*st2)/st1; pocz[pw].second=0.0; pw--; if(pocz[pm].second<0.0000001){pm--;} if(kon[kt].second<0.0000001){kt--;} } else{ kon[kt].second-=pocz[pm].second/st2; pocz[pw].second-=(pocz[pm].second*st1)/st2; pocz[pm].second=0.0; pm--; if(pocz[pw].second<0.0000001){pw--;} if(kon[kt].second<0.0000001){kt--;} } } else if(warpm<0.0){ kon[kt].second-=pocz[pm].second/st2; pocz[pw].second-=(pocz[pm].second*st1)/st2; pocz[pm].second=0.0; pm--; if(pocz[pw].second<0.0000001){pw--;} if(kon[kt].second<0.0000001){kt--;} } else if(warpw<0.0){ kon[kt].second-=pocz[pw].second/st1; pocz[pm].second-=(pocz[pw].second*st2)/st1; pocz[pw].second=0.0; pw--; if(pocz[pm].second<0.0000001){pm--;} if(kon[kt].second<0.0000001){kt--;} } else{kon[kt].second=0.0; kt--; pocz[pm].second=warpm; pocz[pw].second=warpw; if(warpm<0.0000001){pocz[pm].second=0.0;pm--;} if(warpw<0.0000001){pocz[pw].second=0.0;pw--;} } } } if(kt<0||kon[0].second<0.0001){return "TAK\n";} else{return "NIE\n";} } int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); int n;cin>>n; for(int i=0;i<n;i++){ cout<<doit(); } //cout<<"posortowane:"; //for(int i=0;i<t;i++){cout<<pocz[i].first<<" :: "<<pocz[i].second<<' ';} //cout<<'\n'; //for(int i=0;i<t;i++){cout<<kon[i].first<<" :: "<<kon[i].second<<' ';} //cout<<'\n'; //cout<<ep<<' '<<ek<<'\n'; //cout<<"Wm: "<<pocz[pw].second<<"Wt: "<<pocz[pw].first<<"Mm: "<<pocz[pm].second<<"Mt: "<<pocz[pm].first<<"Km: "<<kon[kt].second<<"Kt: "<<kon[kt].first<<'\n'; /*cout<<":"<<kt<<' '<<kon[0].second<<'\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 98 99 100 | #include <iostream> #include <algorithm> using namespace std; string doit() { int t,ep=0,ek=0;cin>>t; pair<int, double> kon[t]; pair<int, double> pocz[t]; for(int i=0;i<t;i++){ cin>>pocz[i].second>>pocz[i].first>>kon[i].first; kon[i].second=pocz[i].second; } sort(kon,kon+t); sort(pocz,pocz+t); for(int i=0;i<t;i++){ ep+=pocz[i].first*int(pocz[i].second); ek+=kon[i].first*int(kon[i].second); } if(ep!=ek){return "NIE\n";} int pw=t-1,pm=t-1,kt=t-1; while(kon[0].second>0.0&&kt>-1&&kon[kt].first<=pocz[pw].first){ while(pm>-1&&pocz[pm].first>kon[kt].first){pm--;} if(pm<0){break;} if(kon[kt].first==pocz[pw].first){ double ppp=min(kon[kt].second,pocz[pw].second); kon[kt].second-=ppp; pocz[pw].second-=ppp; if(kon[kt].second<0.0000001){kon[kt].second=0.0;kt--;} if(pocz[pw].second<0.0000001){pocz[pw].second=0.0;pw--;} } else if(kon[kt].first==pocz[pm].first){ double ppp=min(kon[kt].second,pocz[pm].second); kon[kt].second-=ppp; pocz[pm].second-=ppp; if(kon[kt].second<0.0000001){kon[kt].second=0.0;kt--;} if(pocz[pm].second<0.0000001){pocz[pm].second=0.0;pm--;} } else{ double st1=double(kon[kt].first-pocz[pm].first)/double(pocz[pw].first-pocz[pm].first); double st2=1.0-st1; double warpm=pocz[pm].second-(kon[kt].second*st2),warpw=pocz[pw].second-(kon[kt].second*st1); if(warpm<0.0&&warpw<0.0){ if( ((pocz[pm].second*st1)/st2) > pocz[pw].second){ kon[kt].second-=pocz[pw].second/st1; pocz[pm].second-=(pocz[pw].second*st2)/st1; pocz[pw].second=0.0; pw--; if(pocz[pm].second<0.0000001){pm--;} if(kon[kt].second<0.0000001){kt--;} } else{ kon[kt].second-=pocz[pm].second/st2; pocz[pw].second-=(pocz[pm].second*st1)/st2; pocz[pm].second=0.0; pm--; if(pocz[pw].second<0.0000001){pw--;} if(kon[kt].second<0.0000001){kt--;} } } else if(warpm<0.0){ kon[kt].second-=pocz[pm].second/st2; pocz[pw].second-=(pocz[pm].second*st1)/st2; pocz[pm].second=0.0; pm--; if(pocz[pw].second<0.0000001){pw--;} if(kon[kt].second<0.0000001){kt--;} } else if(warpw<0.0){ kon[kt].second-=pocz[pw].second/st1; pocz[pm].second-=(pocz[pw].second*st2)/st1; pocz[pw].second=0.0; pw--; if(pocz[pm].second<0.0000001){pm--;} if(kon[kt].second<0.0000001){kt--;} } else{kon[kt].second=0.0; kt--; pocz[pm].second=warpm; pocz[pw].second=warpw; if(warpm<0.0000001){pocz[pm].second=0.0;pm--;} if(warpw<0.0000001){pocz[pw].second=0.0;pw--;} } } } if(kt<0||kon[0].second<0.0001){return "TAK\n";} else{return "NIE\n";} } int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); int n;cin>>n; for(int i=0;i<n;i++){ cout<<doit(); } //cout<<"posortowane:"; //for(int i=0;i<t;i++){cout<<pocz[i].first<<" :: "<<pocz[i].second<<' ';} //cout<<'\n'; //for(int i=0;i<t;i++){cout<<kon[i].first<<" :: "<<kon[i].second<<' ';} //cout<<'\n'; //cout<<ep<<' '<<ek<<'\n'; //cout<<"Wm: "<<pocz[pw].second<<"Wt: "<<pocz[pw].first<<"Mm: "<<pocz[pm].second<<"Mt: "<<pocz[pm].first<<"Km: "<<kon[kt].second<<"Kt: "<<kon[kt].first<<'\n'; /*cout<<":"<<kt<<' '<<kon[0].second<<'\n';*/ return 0; } |