#include <iostream> int comparison(const void* a, const void* b) { std::pair<int, int> *t1 = (std::pair<int, int>*)(a); std::pair<int, int> *t2 = (std::pair<int, int>*)(b); if (t1->first > t2->first) return -1; else if (t1->first == t2->first) return 0; else return 1; } int main() { int number_of_sets; std::cin >> number_of_sets; for (int i = 0; i < number_of_sets; ++i) { int number_of_cups; std::pair<int, int> *set1, *set2; std::cin >> number_of_cups; set1 = new std::pair<int, int>[number_of_cups]; set2 = new std::pair<int, int>[number_of_cups]; for (int j = 0; j < number_of_cups; ++j) { int quantity; int temp; std::cin >> quantity; std::cin >> temp; set1[j] = std::make_pair(temp, quantity); std::cin >> temp; set2[j] = std::make_pair(temp, quantity); } std::qsort(set1, number_of_cups, sizeof(std::pair<int, int>), comparison); std::qsort(set2, number_of_cups, sizeof(std::pair<int, int>), comparison); bool good = true; int primary_index[4] = { 0, 0 }; int secondary_index[4] = { 1, 1}; int diff_sum = 0; while (true) { int x = set1[primary_index[0]].first - set2[primary_index[1]].first;//max diff diff_sum += x; if (diff_sum < 0) { good = false; break; } ++secondary_index[0]; if (secondary_index[0] > set1[primary_index[0]].second) { secondary_index[0] = 1; ++primary_index[0]; } ++secondary_index[1]; if (secondary_index[1] > set2[primary_index[1]].second) { secondary_index[1] = 1; ++primary_index[1]; } if (primary_index[0] > number_of_cups - 1 || primary_index[1] > number_of_cups - 1) { break; } } if (good && !diff_sum) { std::cout <<"TAK\n"; } else { std::cout <<"NIE\n"; } delete set1; delete set2; } 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 | #include <iostream> int comparison(const void* a, const void* b) { std::pair<int, int> *t1 = (std::pair<int, int>*)(a); std::pair<int, int> *t2 = (std::pair<int, int>*)(b); if (t1->first > t2->first) return -1; else if (t1->first == t2->first) return 0; else return 1; } int main() { int number_of_sets; std::cin >> number_of_sets; for (int i = 0; i < number_of_sets; ++i) { int number_of_cups; std::pair<int, int> *set1, *set2; std::cin >> number_of_cups; set1 = new std::pair<int, int>[number_of_cups]; set2 = new std::pair<int, int>[number_of_cups]; for (int j = 0; j < number_of_cups; ++j) { int quantity; int temp; std::cin >> quantity; std::cin >> temp; set1[j] = std::make_pair(temp, quantity); std::cin >> temp; set2[j] = std::make_pair(temp, quantity); } std::qsort(set1, number_of_cups, sizeof(std::pair<int, int>), comparison); std::qsort(set2, number_of_cups, sizeof(std::pair<int, int>), comparison); bool good = true; int primary_index[4] = { 0, 0 }; int secondary_index[4] = { 1, 1}; int diff_sum = 0; while (true) { int x = set1[primary_index[0]].first - set2[primary_index[1]].first;//max diff diff_sum += x; if (diff_sum < 0) { good = false; break; } ++secondary_index[0]; if (secondary_index[0] > set1[primary_index[0]].second) { secondary_index[0] = 1; ++primary_index[0]; } ++secondary_index[1]; if (secondary_index[1] > set2[primary_index[1]].second) { secondary_index[1] = 1; ++primary_index[1]; } if (primary_index[0] > number_of_cups - 1 || primary_index[1] > number_of_cups - 1) { break; } } if (good && !diff_sum) { std::cout <<"TAK\n"; } else { std::cout <<"NIE\n"; } delete set1; delete set2; } return 0; } |