#include <cstdio> #include <algorithm> using namespace std; #define f first #define s second const int MAXN = 1e5 + 3; pair<long long, long long> t1[MAXN]; pair<long long, long long> t2[MAXN]; int main() { int z, n, pnt; long long wyn1, wyn2; long long poj1, poj2; bool por; scanf("%d", &z); while (z--) { wyn1 = wyn2 = 0; scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%lld %lld %lld", &t1[i].s, &t1[i].f, &t2[i].f); t2[i].s = t1[i].s; wyn1 += t1[i].s * t1[i].f; wyn2 += t2[i].s * t2[i].f; } if (wyn1 != wyn2) { printf("NIE\n"); continue; } sort(t1 + 1, t1 + n + 1); sort(t2 + 1, t2 + n + 1); wyn1 = wyn2 = 0; poj1 = poj2 = 0; pnt = 0; por = false; t1[n + 1] = {0, 0}; for (int i = 1; i <= n; i++) { wyn2 += t2[i].f * t2[i].s; poj2 += t2[i].s; while (t1[pnt + 1].s + poj1 <= poj2) { pnt++; wyn1 += t1[pnt].f * t1[pnt].s; poj1 += t1[pnt].s; } if (wyn1 + t1[pnt + 1].f * (poj2 - poj1) > wyn2) { por = true; break; } } if (por) { printf("NIE\n"); continue; } pnt = n + 1; wyn1 = wyn2 = 0; poj1 = poj2 = 0; for (int i = n; i > 0; i--) { wyn2 += t2[i].f * t2[i].s; poj2 += t2[i].s; while (t1[pnt - 1].s + poj1 <= poj2) { pnt--; wyn1 += t1[pnt].f * t1[pnt].s; poj1 += t1[pnt].s; } if (wyn1 + t1[pnt - 1].f * (poj2 - poj1) < wyn2) { por = true; break; } } printf(por ? "NIE\n" : "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 | #include <cstdio> #include <algorithm> using namespace std; #define f first #define s second const int MAXN = 1e5 + 3; pair<long long, long long> t1[MAXN]; pair<long long, long long> t2[MAXN]; int main() { int z, n, pnt; long long wyn1, wyn2; long long poj1, poj2; bool por; scanf("%d", &z); while (z--) { wyn1 = wyn2 = 0; scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%lld %lld %lld", &t1[i].s, &t1[i].f, &t2[i].f); t2[i].s = t1[i].s; wyn1 += t1[i].s * t1[i].f; wyn2 += t2[i].s * t2[i].f; } if (wyn1 != wyn2) { printf("NIE\n"); continue; } sort(t1 + 1, t1 + n + 1); sort(t2 + 1, t2 + n + 1); wyn1 = wyn2 = 0; poj1 = poj2 = 0; pnt = 0; por = false; t1[n + 1] = {0, 0}; for (int i = 1; i <= n; i++) { wyn2 += t2[i].f * t2[i].s; poj2 += t2[i].s; while (t1[pnt + 1].s + poj1 <= poj2) { pnt++; wyn1 += t1[pnt].f * t1[pnt].s; poj1 += t1[pnt].s; } if (wyn1 + t1[pnt + 1].f * (poj2 - poj1) > wyn2) { por = true; break; } } if (por) { printf("NIE\n"); continue; } pnt = n + 1; wyn1 = wyn2 = 0; poj1 = poj2 = 0; for (int i = n; i > 0; i--) { wyn2 += t2[i].f * t2[i].s; poj2 += t2[i].s; while (t1[pnt - 1].s + poj1 <= poj2) { pnt--; wyn1 += t1[pnt].f * t1[pnt].s; poj1 += t1[pnt].s; } if (wyn1 + t1[pnt - 1].f * (poj2 - poj1) < wyn2) { por = true; break; } } printf(por ? "NIE\n" : "TAK\n"); } return 0; } |