#include <cstdio> #include <algorithm> typedef std::pair <long long, long long> P; P A[100005]; P B[100005]; void TC(int jj) { long long SA = 0, SB = 0; int N; scanf("%d", &N); for (int i = 0; i < N; ++i) { int l, a, b; scanf("%d %d %d", &l, &a, &b); SA += a*l; SB += b*l; A[i].first = B[i].first = l; A[i].second = a; B[i].second = b; } if (SA != SB) { printf("NIE\n"); return; } auto sorter = [] (P x, P y) { return x.second < y.second; }; std::sort(B, B+N, sorter); std::sort(A, A+N, sorter); int ai = 0, bi = 0; long long debt = 0; while (bi < N) { if (B[bi].second > A[ai].second) { int diff = B[bi].second - A[ai].second; debt += A[ai].first * diff; A[ai].second = B[bi].second; } if (B[bi].second < A[ai].second) { int tempdiff = A[ai].second - B[bi].second; bool full = (A[ai].first >= B[bi].first); int voldiff = full ? B[bi].first : A[ai].first; long long temp_needed = tempdiff * voldiff; if (temp_needed > debt) { printf("NIE\n"); return; } debt -= temp_needed; } if (A[ai].first == B[bi].first) { ++ai; ++bi; } else if (A[ai].first > B[bi].first) { A[ai].first -= B[bi].first; ++bi; } else { B[bi].first -= A[ai].first; ++ai; } } printf("TAK\n"); return; } int main() { int N; scanf("%d", &N); for (int j = 0; j < N; ++j) TC(j); 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 | #include <cstdio> #include <algorithm> typedef std::pair <long long, long long> P; P A[100005]; P B[100005]; void TC(int jj) { long long SA = 0, SB = 0; int N; scanf("%d", &N); for (int i = 0; i < N; ++i) { int l, a, b; scanf("%d %d %d", &l, &a, &b); SA += a*l; SB += b*l; A[i].first = B[i].first = l; A[i].second = a; B[i].second = b; } if (SA != SB) { printf("NIE\n"); return; } auto sorter = [] (P x, P y) { return x.second < y.second; }; std::sort(B, B+N, sorter); std::sort(A, A+N, sorter); int ai = 0, bi = 0; long long debt = 0; while (bi < N) { if (B[bi].second > A[ai].second) { int diff = B[bi].second - A[ai].second; debt += A[ai].first * diff; A[ai].second = B[bi].second; } if (B[bi].second < A[ai].second) { int tempdiff = A[ai].second - B[bi].second; bool full = (A[ai].first >= B[bi].first); int voldiff = full ? B[bi].first : A[ai].first; long long temp_needed = tempdiff * voldiff; if (temp_needed > debt) { printf("NIE\n"); return; } debt -= temp_needed; } if (A[ai].first == B[bi].first) { ++ai; ++bi; } else if (A[ai].first > B[bi].first) { A[ai].first -= B[bi].first; ++bi; } else { B[bi].first -= A[ai].first; ++ai; } } printf("TAK\n"); return; } int main() { int N; scanf("%d", &N); for (int j = 0; j < N; ++j) TC(j); return 0; } |