#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;
typedef vector<int> VI;
typedef set<int> SI;
typedef pair<int, int> PII;
typedef pair<LL, LL> PLL;
typedef vector<PII> VPII;
typedef vector<PLL> VPLL;
const int INF = 1000000001;
const LD EPS = 1e-9;
const int MOD = 1000000007;
const LL LLINF = 1000000000000000001;
#define FOR(i, b, e) for(int i = b; i <= e; i++)
#define FORD(i, b, e) for(int i = b; i >= e; i--)
#define ALL(c) (c).begin(), (c).end()
#define SIZE(x) ((int)(x).size())
#define DPRINT(x) cout << #x << ": " << x << endl
#define BOOST ios_base::sync_with_stdio(false); cin.tie(0)
#define MP make_pair
#define PB push_back
#define ST first
#define ND second
#define GGL(x) "Case #" << x << ": "
// ゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴ
int main()
{
BOOST;
int T;
cin >> T;
while(T--)
{
int n;
cin >> n;
VPLL avalible;
VPLL needed;
FOR(i, 1, n)
{
LL l, a, b;
cin >> l >> a >> b;
avalible.PB({a, l});
needed.PB({b, l});
}
avalible.PB({-LLINF, 0});
sort(ALL(avalible), greater<PLL>());
sort(ALL(needed), greater<PLL>());
bool good = true;
LL neededEnergy = 0;
LL avalibleEnergy = 0;
auto it = avalible.begin();
for(auto i : needed)
{
neededEnergy += i.ND * i.ST;
while(i.ND > 0)
{
LL tosub = min(i.ND, it->ND);
avalibleEnergy += tosub * it->ST;
i.ND -= tosub;
it->ND -= tosub;
if(it->ND == 0)
it++;
}
if(neededEnergy > avalibleEnergy)
good = false;
}
if(good && avalibleEnergy == neededEnergy)
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 | #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef long double LD; typedef unsigned long long ULL; typedef vector<int> VI; typedef set<int> SI; typedef pair<int, int> PII; typedef pair<LL, LL> PLL; typedef vector<PII> VPII; typedef vector<PLL> VPLL; const int INF = 1000000001; const LD EPS = 1e-9; const int MOD = 1000000007; const LL LLINF = 1000000000000000001; #define FOR(i, b, e) for(int i = b; i <= e; i++) #define FORD(i, b, e) for(int i = b; i >= e; i--) #define ALL(c) (c).begin(), (c).end() #define SIZE(x) ((int)(x).size()) #define DPRINT(x) cout << #x << ": " << x << endl #define BOOST ios_base::sync_with_stdio(false); cin.tie(0) #define MP make_pair #define PB push_back #define ST first #define ND second #define GGL(x) "Case #" << x << ": " // ゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴゴ int main() { BOOST; int T; cin >> T; while(T--) { int n; cin >> n; VPLL avalible; VPLL needed; FOR(i, 1, n) { LL l, a, b; cin >> l >> a >> b; avalible.PB({a, l}); needed.PB({b, l}); } avalible.PB({-LLINF, 0}); sort(ALL(avalible), greater<PLL>()); sort(ALL(needed), greater<PLL>()); bool good = true; LL neededEnergy = 0; LL avalibleEnergy = 0; auto it = avalible.begin(); for(auto i : needed) { neededEnergy += i.ND * i.ST; while(i.ND > 0) { LL tosub = min(i.ND, it->ND); avalibleEnergy += tosub * it->ST; i.ND -= tosub; it->ND -= tosub; if(it->ND == 0) it++; } if(neededEnergy > avalibleEnergy) good = false; } if(good && avalibleEnergy == neededEnergy) cout << "TAK\n"; else cout << "NIE\n"; } } |
English