#include <cstdio> #include <utility> #include <algorithm> #include <functional> #define REP(a, n) for (int a = 0; a < (n); ++a) #define INF 1000000000 typedef long long LL; using namespace std; ////////////////////////// #define MAXN 100000 int N; pair<int, int> jest[MAXN], ma_byc[MAXN]; bool solve() { scanf("%d", &N); REP(a, N) { scanf("%d%d%d", &jest[a].second, &jest[a].first, &ma_byc[a].first); ma_byc[a].second = jest[a].second; } sort(jest, jest + N, greater<>()); sort(ma_byc, ma_byc + N, greater<>()); LL nadmiar = 0; int cur_jest = 0, cur_ma_byc = 0; while (cur_ma_byc < N) { if (jest[cur_jest].second < ma_byc[cur_ma_byc].second) { nadmiar += jest[cur_jest].second * (LL)(jest[cur_jest].first - jest[cur_jest + 1].first); jest[cur_jest + 1].second += jest[cur_jest].second; ++cur_jest; continue; } nadmiar += ma_byc[cur_ma_byc].second * (LL)(jest[cur_jest].first - ma_byc[cur_ma_byc].first); if (nadmiar < 0) return false; // fprintf(stderr, "Tworze kubek o objetosci %d i temperaturze %d; zostaje mi %lld energii\n", ma_byc[cur_ma_byc].second, ma_byc[cur_ma_byc].first, nadmiar); jest[cur_jest].second -= ma_byc[cur_ma_byc].second; ++cur_ma_byc; } return !nadmiar; } int main() { int TT; scanf("%d", &TT); REP(tt, TT) printf("%s\n", solve() ? "TAK" : "NIE"); }
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 | #include <cstdio> #include <utility> #include <algorithm> #include <functional> #define REP(a, n) for (int a = 0; a < (n); ++a) #define INF 1000000000 typedef long long LL; using namespace std; ////////////////////////// #define MAXN 100000 int N; pair<int, int> jest[MAXN], ma_byc[MAXN]; bool solve() { scanf("%d", &N); REP(a, N) { scanf("%d%d%d", &jest[a].second, &jest[a].first, &ma_byc[a].first); ma_byc[a].second = jest[a].second; } sort(jest, jest + N, greater<>()); sort(ma_byc, ma_byc + N, greater<>()); LL nadmiar = 0; int cur_jest = 0, cur_ma_byc = 0; while (cur_ma_byc < N) { if (jest[cur_jest].second < ma_byc[cur_ma_byc].second) { nadmiar += jest[cur_jest].second * (LL)(jest[cur_jest].first - jest[cur_jest + 1].first); jest[cur_jest + 1].second += jest[cur_jest].second; ++cur_jest; continue; } nadmiar += ma_byc[cur_ma_byc].second * (LL)(jest[cur_jest].first - ma_byc[cur_ma_byc].first); if (nadmiar < 0) return false; // fprintf(stderr, "Tworze kubek o objetosci %d i temperaturze %d; zostaje mi %lld energii\n", ma_byc[cur_ma_byc].second, ma_byc[cur_ma_byc].first, nadmiar); jest[cur_jest].second -= ma_byc[cur_ma_byc].second; ++cur_ma_byc; } return !nadmiar; } int main() { int TT; scanf("%d", &TT); REP(tt, TT) printf("%s\n", solve() ? "TAK" : "NIE"); } |