#include <stdio.h> #include <stdlib.h> #include <string.h> #define ISNUMERIC(x) (x >= '0' && x <= '9') #define COMPFUNC int getInt() { static char num[12]; int n = 0; int c; for (c = getchar(); !ISNUMERIC(c); c = getchar()); num[n++] = c; for (c = getchar(); ISNUMERIC(c); c = getchar()) { num[n++] = (char)c; } num[n] = 0; return atoi(num); } typedef struct{ int x; int y; }Punkt; typedef struct{ Punkt p1; Punkt p2; }Prostokat; typedef struct{ Prostokat poz; Prostokat pozDoc; }Samochod; typedef struct{ int h; int nSam; Samochod *samochody; }Parking; #define GetProst(pros) pros.p1.x = getInt(); pros.p1.y = getInt(); pros.p2.x = getInt(); pros.p2.y = getInt() #define H(sam) (sam.poz.p2.y - sam.poz.p1.y) int compSam(const void *a, const void *b) { #define SA (((const Samochod *)a)->poz.p1) #define SB (((const Samochod *)b)->poz.p1) if (SA.x < SB.x) return -1; if (SA.x > SB.x) return 1; return 0; #undef SA #undef SB } int main(int argc, char **argv) { Parking parking; int n; bool sukces; n = getInt(); for (int ind = 0; ind<n; ++ind) { parking.nSam = getInt(); parking.h = getInt(); parking.samochody = new Samochod[parking.nSam]; for (int i = 0; i<parking.nSam; ++i) { GetProst(parking.samochody[i].poz); } for (int i = 0; i<parking.nSam; ++i) { GetProst(parking.samochody[i].pozDoc); } qsort(parking.samochody, parking.nSam, sizeof(Samochod), compSam); sukces = true; for (int i = 1; i<parking.nSam && sukces; ++i) { int x = parking.samochody[i].poz.p1.x; int dH = parking.h - H(parking.samochody[i]); int dX = parking.samochody[i].pozDoc.p1.x; for (int j = i - 1; j >= 0 && parking.samochody[j].poz.p1.x >= dX; --j) { if (H(parking.samochody[j]) > dH) { sukces = false; break; } } } puts((sukces ? "TAK" : "NIE")); delete parking.samochody; } }
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 96 97 98 99 100 101 102 103 104 105 106 107 | #include <stdio.h> #include <stdlib.h> #include <string.h> #define ISNUMERIC(x) (x >= '0' && x <= '9') #define COMPFUNC int getInt() { static char num[12]; int n = 0; int c; for (c = getchar(); !ISNUMERIC(c); c = getchar()); num[n++] = c; for (c = getchar(); ISNUMERIC(c); c = getchar()) { num[n++] = (char)c; } num[n] = 0; return atoi(num); } typedef struct{ int x; int y; }Punkt; typedef struct{ Punkt p1; Punkt p2; }Prostokat; typedef struct{ Prostokat poz; Prostokat pozDoc; }Samochod; typedef struct{ int h; int nSam; Samochod *samochody; }Parking; #define GetProst(pros) pros.p1.x = getInt(); pros.p1.y = getInt(); pros.p2.x = getInt(); pros.p2.y = getInt() #define H(sam) (sam.poz.p2.y - sam.poz.p1.y) int compSam(const void *a, const void *b) { #define SA (((const Samochod *)a)->poz.p1) #define SB (((const Samochod *)b)->poz.p1) if (SA.x < SB.x) return -1; if (SA.x > SB.x) return 1; return 0; #undef SA #undef SB } int main(int argc, char **argv) { Parking parking; int n; bool sukces; n = getInt(); for (int ind = 0; ind<n; ++ind) { parking.nSam = getInt(); parking.h = getInt(); parking.samochody = new Samochod[parking.nSam]; for (int i = 0; i<parking.nSam; ++i) { GetProst(parking.samochody[i].poz); } for (int i = 0; i<parking.nSam; ++i) { GetProst(parking.samochody[i].pozDoc); } qsort(parking.samochody, parking.nSam, sizeof(Samochod), compSam); sukces = true; for (int i = 1; i<parking.nSam && sukces; ++i) { int x = parking.samochody[i].poz.p1.x; int dH = parking.h - H(parking.samochody[i]); int dX = parking.samochody[i].pozDoc.p1.x; for (int j = i - 1; j >= 0 && parking.samochody[j].poz.p1.x >= dX; --j) { if (H(parking.samochody[j]) > dH) { sukces = false; break; } } } puts((sukces ? "TAK" : "NIE")); delete parking.samochody; } } |