#include <bits/stdc++.h> using namespace std; struct p{ int l; int t; }; #define ll long long p make(float a, float b){ p p1; p1.l = a; p1.t = b; return p1; } int main(){ int n, m, zm =0; float l, t0, t1, a, b; vector <p> tem0; vector <p> tem1; cin >> n; for(int i=0; i<=n-1;i++){ cin >> m; vector <p> tem0; vector <p> tem1; for(int j=0; j<=m-1; j++){ cin >> l >> t0 >> t1; tem0.push_back(make(l,t0)); tem1.push_back(make(l,t1)); } for(int k=0; k<=tem1.size()-1; k++){ zm =0; for(int i=0; i<=tem0.size()-1; i++){ if(tem1[k].l == 0){ break; } if(tem1[k].t == tem0[i].t){ if(tem0[k].l >= tem1[i].l){ tem1[k].l -= tem0[i].l; tem0[i].l = 0; }else{ tem0[i].l = - 1* (tem1[k].l -tem0[i].l); tem1[k].l = 0 ; } } for(int j=0; j<=tem0.size()-1; j++){ if(i!=j && tem0[j].l !=0){ a = (tem1[k].t * (tem1[k].l)); a -= (tem0[j].t*(tem1[k].l)); a /= (tem0[i].t - tem0[j].t); b = (tem1[k].l) - a; // if(a <= tem0[i].l && a >= 0 && b <= tem0[j].l && b>= 0){ tem0[i].l -= a; tem0[j].l -= b; if(a+b> tem1[k].l){ tem0.push_back(make((a+b - tem1[k].l),tem1[k].t)); tem1[k].l =0; k = 0; }else { tem1[k].l -= a+b; k=0; } // } } } } } int w=0; for(int i=0; i<=tem1.size()-1; i++){ if(tem1[i].l != 0){ w =1; } } if (w == 0){ cout << "TAK"; }else cout << "NIE"; } 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 | #include <bits/stdc++.h> using namespace std; struct p{ int l; int t; }; #define ll long long p make(float a, float b){ p p1; p1.l = a; p1.t = b; return p1; } int main(){ int n, m, zm =0; float l, t0, t1, a, b; vector <p> tem0; vector <p> tem1; cin >> n; for(int i=0; i<=n-1;i++){ cin >> m; vector <p> tem0; vector <p> tem1; for(int j=0; j<=m-1; j++){ cin >> l >> t0 >> t1; tem0.push_back(make(l,t0)); tem1.push_back(make(l,t1)); } for(int k=0; k<=tem1.size()-1; k++){ zm =0; for(int i=0; i<=tem0.size()-1; i++){ if(tem1[k].l == 0){ break; } if(tem1[k].t == tem0[i].t){ if(tem0[k].l >= tem1[i].l){ tem1[k].l -= tem0[i].l; tem0[i].l = 0; }else{ tem0[i].l = - 1* (tem1[k].l -tem0[i].l); tem1[k].l = 0 ; } } for(int j=0; j<=tem0.size()-1; j++){ if(i!=j && tem0[j].l !=0){ a = (tem1[k].t * (tem1[k].l)); a -= (tem0[j].t*(tem1[k].l)); a /= (tem0[i].t - tem0[j].t); b = (tem1[k].l) - a; // if(a <= tem0[i].l && a >= 0 && b <= tem0[j].l && b>= 0){ tem0[i].l -= a; tem0[j].l -= b; if(a+b> tem1[k].l){ tem0.push_back(make((a+b - tem1[k].l),tem1[k].t)); tem1[k].l =0; k = 0; }else { tem1[k].l -= a+b; k=0; } // } } } } } int w=0; for(int i=0; i<=tem1.size()-1; i++){ if(tem1[i].l != 0){ w =1; } } if (w == 0){ cout << "TAK"; }else cout << "NIE"; } return 0; } |