#include <iostream> #include <vector> #include <algorithm> #include <list> using namespace std; typedef struct coord { int x1; int x2; int y1; int y2; } coord_t; typedef struct car { coord_t src; coord_t dst; int height; } car_t; bool comp_cars(const car_t* a, const car_t* b) { return a->height > b->height; } bool check(car_t** sorted_cars, int cars_count, int park_width) { bool answer = true; int bi = 0; int ei; int curr_height; while (bi < cars_count && sorted_cars[bi]->height > park_width / 2) { ei = bi + 1; curr_height = sorted_cars[bi]->height; while (ei < cars_count && sorted_cars[ei]->height + curr_height > park_width) { if (sorted_cars[bi]->src.x1 < sorted_cars[ei]->src.x1) { if (sorted_cars[bi]->dst.x1 > sorted_cars[ei]->dst.x1) { return false; } } else { if (sorted_cars[bi]->dst.x1 < sorted_cars[ei]->dst.x1) { return false; } } ++ei; } ++bi; } return answer; } void one_case() { int cars_count; int park_width; car_t* cars; car_t** sorted_cars; cin >> cars_count >> park_width; cars = new car_t[cars_count]; sorted_cars = new car_t*[cars_count]; for (int i = 0; i < cars_count; ++i) { cin >> cars[i].src.x1 >> cars[i].src.y1 >> cars[i].src.x2 >> cars[i].src.y2; cars[i].height = cars[i].src.y2 - cars[i].src.y1; sorted_cars[i] = &(cars[i]); } for (int i = 0; i < cars_count; ++i) { cin >> cars[i].dst.x1 >> cars[i].dst.y1 >> cars[i].dst.x2 >> cars[i].dst.y2; cars[i].height = cars[i].dst.y2 - cars[i].dst.y1; } sort(sorted_cars, sorted_cars + cars_count, comp_cars); cout << (check(sorted_cars, cars_count, park_width) ? "TAK" : "NIE") << endl; delete [] cars; delete [] sorted_cars; } int main() { int tc; ios_base::sync_with_stdio(0); cin >> tc; while (tc--) { one_case(); } 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 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | #include <iostream> #include <vector> #include <algorithm> #include <list> using namespace std; typedef struct coord { int x1; int x2; int y1; int y2; } coord_t; typedef struct car { coord_t src; coord_t dst; int height; } car_t; bool comp_cars(const car_t* a, const car_t* b) { return a->height > b->height; } bool check(car_t** sorted_cars, int cars_count, int park_width) { bool answer = true; int bi = 0; int ei; int curr_height; while (bi < cars_count && sorted_cars[bi]->height > park_width / 2) { ei = bi + 1; curr_height = sorted_cars[bi]->height; while (ei < cars_count && sorted_cars[ei]->height + curr_height > park_width) { if (sorted_cars[bi]->src.x1 < sorted_cars[ei]->src.x1) { if (sorted_cars[bi]->dst.x1 > sorted_cars[ei]->dst.x1) { return false; } } else { if (sorted_cars[bi]->dst.x1 < sorted_cars[ei]->dst.x1) { return false; } } ++ei; } ++bi; } return answer; } void one_case() { int cars_count; int park_width; car_t* cars; car_t** sorted_cars; cin >> cars_count >> park_width; cars = new car_t[cars_count]; sorted_cars = new car_t*[cars_count]; for (int i = 0; i < cars_count; ++i) { cin >> cars[i].src.x1 >> cars[i].src.y1 >> cars[i].src.x2 >> cars[i].src.y2; cars[i].height = cars[i].src.y2 - cars[i].src.y1; sorted_cars[i] = &(cars[i]); } for (int i = 0; i < cars_count; ++i) { cin >> cars[i].dst.x1 >> cars[i].dst.y1 >> cars[i].dst.x2 >> cars[i].dst.y2; cars[i].height = cars[i].dst.y2 - cars[i].dst.y1; } sort(sorted_cars, sorted_cars + cars_count, comp_cars); cout << (check(sorted_cars, cars_count, park_width) ? "TAK" : "NIE") << endl; delete [] cars; delete [] sorted_cars; } int main() { int tc; ios_base::sync_with_stdio(0); cin >> tc; while (tc--) { one_case(); } return 0; } |