#include <bits/stdc++.h> #pragma GCC optimize ("-O3") #define io cin.sync_with_stdio(0);cin.tie(0); \ cin.exceptions(cin.failbit); using namespace std; using ll=long long; using pii=pair<int,int>;using vi=vector<int>; #define FOR(i,a,b) for(int i=a;i<=b;++i) #define ROF(i,a,b) for(int i=a;i>=b;--i) #define VEC(i,v) for(auto&i:v) #define I(x) ({x t;cin>>t;t;}) #define sz(x) int(x.size()) #define oo INT_MAX #define pf printf struct kubek { int k; int t; }; int main() { io; int t = I(int); for (int T = 0; T < t; T++) { int n = I(int); int status = 1; ll Q = 0; deque<kubek> V, R; for (int i = 0; i < n; i++) { int k = I(int), t1 = I(int), t2 = I(int); V.push_back({k, t1}); R.push_back({k, t2}); } sort(V.begin(), V.end(), [](const kubek &a, const kubek &b) -> bool { return a.t > b.t; }); sort(R.begin(), R.end(), [](const kubek &a, const kubek &b) -> bool { return a.t > b.t; }); while (!V.empty()) { kubek x = V.front(); V.pop_front(); kubek y = R.front(); R.pop_front(); if (x.t >= y.t) { int h = x.t - y.t; Q += h * x.k; if (x.k > y.k) { V.push_front({x.k - y.k, y.t}); } else { R.push_front({y.k - x.k, y.t}); } } else { int h = y.t - x.t; if (x.k > y.k) { V.push_front({x.k - y.k, x.t}); Q -= y.k * h; } else { R.push_front({y.k - x.k, y.t}); Q -= x.k * h; } } if (Q < 0) { status = -1; break; } } if (status == -1 || Q != 0) { pf("NIE\n"); } else { pf("TAK\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 | #include <bits/stdc++.h> #pragma GCC optimize ("-O3") #define io cin.sync_with_stdio(0);cin.tie(0); \ cin.exceptions(cin.failbit); using namespace std; using ll=long long; using pii=pair<int,int>;using vi=vector<int>; #define FOR(i,a,b) for(int i=a;i<=b;++i) #define ROF(i,a,b) for(int i=a;i>=b;--i) #define VEC(i,v) for(auto&i:v) #define I(x) ({x t;cin>>t;t;}) #define sz(x) int(x.size()) #define oo INT_MAX #define pf printf struct kubek { int k; int t; }; int main() { io; int t = I(int); for (int T = 0; T < t; T++) { int n = I(int); int status = 1; ll Q = 0; deque<kubek> V, R; for (int i = 0; i < n; i++) { int k = I(int), t1 = I(int), t2 = I(int); V.push_back({k, t1}); R.push_back({k, t2}); } sort(V.begin(), V.end(), [](const kubek &a, const kubek &b) -> bool { return a.t > b.t; }); sort(R.begin(), R.end(), [](const kubek &a, const kubek &b) -> bool { return a.t > b.t; }); while (!V.empty()) { kubek x = V.front(); V.pop_front(); kubek y = R.front(); R.pop_front(); if (x.t >= y.t) { int h = x.t - y.t; Q += h * x.k; if (x.k > y.k) { V.push_front({x.k - y.k, y.t}); } else { R.push_front({y.k - x.k, y.t}); } } else { int h = y.t - x.t; if (x.k > y.k) { V.push_front({x.k - y.k, x.t}); Q -= y.k * h; } else { R.push_front({y.k - x.k, y.t}); Q -= x.k * h; } } if (Q < 0) { status = -1; break; } } if (status == -1 || Q != 0) { pf("NIE\n"); } else { pf("TAK\n"); } } return 0; } |