#include <bits/stdc++.h> #include <iostream> using namespace std; int t, n, l_, a_, b_; pair<int, int> a[1000002], b[1000002]; // a ~ {temp, vol}, b ~ {expected, vol} int main() { ios::sync_with_stdio(false); cin >> t; while(t--) { cin >> n; for (int i = 1; i <= n; i++) { cin >> l_ >> a_ >> b_; a[i] = {a_, l_}; b[i] = {b_, l_}; } sort(a + 1, a + n + 1); sort(b + 1, b + n + 1); bool git = true; int vol = 0, vol_a = 0, curr_a = n; long long temp_sum = 0, temp_sum_a = 0; for (int i = n; i >= 1; i--) { vol += b[i].second; temp_sum += b[i].second*b[i].first; while (curr_a >= 1 && vol_a + a[curr_a].second <= vol) { vol_a += a[curr_a].second; temp_sum_a += a[curr_a].second*a[curr_a].first; curr_a--; } long long temp = (vol_a == vol) ? temp_sum_a : (temp_sum_a + (vol-vol_a)*a[curr_a].first); if (temp < temp_sum) { git = false; break; } } if (git == false) { cout << "NIE" << endl; continue; } vol = 0; vol_a = 0; curr_a = 1; temp_sum = 0; temp_sum_a = 0; for (int i = 1; i <= n; i++) { vol += b[i].second; temp_sum += b[i].second*b[i].first; while (curr_a <= n && vol_a + a[curr_a].second <= vol) { vol_a += a[curr_a].second; temp_sum_a += a[curr_a].second*a[curr_a].first; curr_a++; } long long temp = (vol_a == vol) ? temp_sum_a : (temp_sum_a + (vol-vol_a)*a[curr_a].first); if (temp > temp_sum) { git = false; break; } } if (git == false) { cout << "NIE" << endl; } else { cout << "TAK" << endl; } } 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 | #include <bits/stdc++.h> #include <iostream> using namespace std; int t, n, l_, a_, b_; pair<int, int> a[1000002], b[1000002]; // a ~ {temp, vol}, b ~ {expected, vol} int main() { ios::sync_with_stdio(false); cin >> t; while(t--) { cin >> n; for (int i = 1; i <= n; i++) { cin >> l_ >> a_ >> b_; a[i] = {a_, l_}; b[i] = {b_, l_}; } sort(a + 1, a + n + 1); sort(b + 1, b + n + 1); bool git = true; int vol = 0, vol_a = 0, curr_a = n; long long temp_sum = 0, temp_sum_a = 0; for (int i = n; i >= 1; i--) { vol += b[i].second; temp_sum += b[i].second*b[i].first; while (curr_a >= 1 && vol_a + a[curr_a].second <= vol) { vol_a += a[curr_a].second; temp_sum_a += a[curr_a].second*a[curr_a].first; curr_a--; } long long temp = (vol_a == vol) ? temp_sum_a : (temp_sum_a + (vol-vol_a)*a[curr_a].first); if (temp < temp_sum) { git = false; break; } } if (git == false) { cout << "NIE" << endl; continue; } vol = 0; vol_a = 0; curr_a = 1; temp_sum = 0; temp_sum_a = 0; for (int i = 1; i <= n; i++) { vol += b[i].second; temp_sum += b[i].second*b[i].first; while (curr_a <= n && vol_a + a[curr_a].second <= vol) { vol_a += a[curr_a].second; temp_sum_a += a[curr_a].second*a[curr_a].first; curr_a++; } long long temp = (vol_a == vol) ? temp_sum_a : (temp_sum_a + (vol-vol_a)*a[curr_a].first); if (temp > temp_sum) { git = false; break; } } if (git == false) { cout << "NIE" << endl; } else { cout << "TAK" << endl; } } return 0; } |