#include <iostream>
#include <bitset>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
using ll = long long;
struct K
{
int V, T;
};
struct W
{
ll V, E;
};
int main()
{
ios_base::sync_with_stdio(false);
int t, n, l, a, b;
ll A, B;
int aMax, aMin, bMax, bMin;
vector<K> as, bs;
cin >> t;
while (t--)
{
aMax = -10000000;
bMax = -10000000;
aMin = 10000000;
bMin = 10000000;
A = 0;
B = 0;
cin >> n;
as.resize(n);
bs.resize(n);
while (n--)
{
cin >> l >> a >> b;
A += ll(l) * ll(a);
B += ll(l) * ll(b);
aMax = max(aMax, a);
bMax = max(bMax, b);
aMin = min(aMin, a);
bMin = min(bMin, b);
as[n] = {l, a};
bs[n] = {l, b};
}
if (A == B && aMax >= bMax && aMin <= bMin)
{
sort(as.begin(), as.end(), [](K &a, K &b) {
return a.T < b.T;
});
sort(bs.begin(), bs.end(), [](K &a, K &b) {
return a.T < b.T;
});
auto asI = as.begin();
W aW = {0, 0}, bW = {0, 0};
bool bad = false;
for (K &bx : bs)
{
bW.V += ll(bx.V);
bW.E += ll(bx.V) * ll(bx.T);
while (bx.V)
{
if (asI->V <= bx.V)
{
bx.V -= asI->V;
aW.V += ll(asI->V);
aW.E += ll(asI->V) * ll(asI->T);
asI++;
}
else
{
aW.V += ll(bx.V);
aW.E += ll(bx.V) * ll(asI->T);
asI->V -= bx.V;
bx.V = 0;
}
}
//cout<<"Wiaderko A ma V="<<aW.V<<" i E="<<aW.E<<endl;
//cout<<"Wiaderko B ma V="<<bW.V<<" i E="<<bW.E<<endl;
if (aW.E > bW.E)
{
//cout<<"BOO\n";
bad = true;
break;
}
}
if (bad)
cout << "NIE\n";
else
cout << "TAK\n";
}
else
cout << "NIE\n";
}
}
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 | #include <iostream> #include <bitset> #include <vector> #include <algorithm> #include <cmath> using namespace std; using ll = long long; struct K { int V, T; }; struct W { ll V, E; }; int main() { ios_base::sync_with_stdio(false); int t, n, l, a, b; ll A, B; int aMax, aMin, bMax, bMin; vector<K> as, bs; cin >> t; while (t--) { aMax = -10000000; bMax = -10000000; aMin = 10000000; bMin = 10000000; A = 0; B = 0; cin >> n; as.resize(n); bs.resize(n); while (n--) { cin >> l >> a >> b; A += ll(l) * ll(a); B += ll(l) * ll(b); aMax = max(aMax, a); bMax = max(bMax, b); aMin = min(aMin, a); bMin = min(bMin, b); as[n] = {l, a}; bs[n] = {l, b}; } if (A == B && aMax >= bMax && aMin <= bMin) { sort(as.begin(), as.end(), [](K &a, K &b) { return a.T < b.T; }); sort(bs.begin(), bs.end(), [](K &a, K &b) { return a.T < b.T; }); auto asI = as.begin(); W aW = {0, 0}, bW = {0, 0}; bool bad = false; for (K &bx : bs) { bW.V += ll(bx.V); bW.E += ll(bx.V) * ll(bx.T); while (bx.V) { if (asI->V <= bx.V) { bx.V -= asI->V; aW.V += ll(asI->V); aW.E += ll(asI->V) * ll(asI->T); asI++; } else { aW.V += ll(bx.V); aW.E += ll(bx.V) * ll(asI->T); asI->V -= bx.V; bx.V = 0; } } //cout<<"Wiaderko A ma V="<<aW.V<<" i E="<<aW.E<<endl; //cout<<"Wiaderko B ma V="<<bW.V<<" i E="<<bW.E<<endl; if (aW.E > bW.E) { //cout<<"BOO\n"; bad = true; break; } } if (bad) cout << "NIE\n"; else cout << "TAK\n"; } else cout << "NIE\n"; } } |
English