#include <cstdio> #include <cstdlib> #define NAJW_PLEMION 100 ## 000 struct prostokat { int Xpocz, Xkon, Ypocz, Ykon; }; int rosnaco(const void * a, const void * b) { prostokat A = *(prostokat *) a; prostokat B = *(prostokat *) b; if (A.Xpocz != B.Xpocz) return A.Xpocz - B.Xpocz; else if (A.Xkon != B.Xkon) return A.Xkon - B.Xkon; else if (A.Ypocz != B.Ypocz) return A.Ypocz - B.Ypocz; else return A.Ykon - B.Ykon; } int main() { int plemion, i, j; prostokat tbl[NAJW_PLEMION]; bool zmiana = true; scanf("%d", &plemion); for(i=0;i<plemion;++i) { scanf("%d %d %d %d", &tbl[i].Xpocz, &tbl[i].Xkon, &tbl[i].Ypocz, &tbl[i].Ykon); if (tbl[i].Xkon < tbl[i].Xpocz) { tbl[i].Xkon ^= tbl[i].Xpocz; tbl[i].Xpocz ^= tbl[i].Xkon; tbl[i].Xkon ^= tbl[i].Xpocz; } if (tbl[i].Ykon < tbl[i].Ypocz) { tbl[i].Ykon ^= tbl[i].Ypocz; tbl[i].Ypocz ^= tbl[i].Ykon; tbl[i].Ykon ^= tbl[i].Ypocz; } } while (zmiana) { zmiana = false; for (i=0;i<plemion;++i) { j = i+1; while (j<plemion) { if (tbl[i].Xpocz < tbl[j].Xkon && tbl[j].Xpocz < tbl[i].Xkon && tbl[i].Ypocz < tbl[j].Ykon && tbl[j].Ypocz < tbl[i].Ykon) { tbl[i].Xpocz = tbl[i].Xpocz < tbl[j].Xpocz? tbl[i].Xpocz: tbl[j].Xpocz; tbl[i].Xkon = tbl[i].Xkon > tbl[j].Xkon? tbl[i].Xkon: tbl[j].Xkon; tbl[i].Ypocz = tbl[i].Ypocz < tbl[j].Ypocz? tbl[i].Ypocz: tbl[j].Ypocz; tbl[i].Ykon = tbl[i].Ykon > tbl[j].Ykon? tbl[i].Ykon: tbl[j].Ykon; --plemion; tbl[j].Xpocz = tbl[plemion].Xpocz; tbl[j].Xkon = tbl[plemion].Xkon; tbl[j].Ypocz = tbl[plemion].Ypocz; tbl[j].Ykon = tbl[plemion].Ykon; zmiana = true; } else ++j; } } } qsort(tbl, plemion, sizeof *tbl, rosnaco); printf("%d\n", plemion); for (i=0;i<plemion;++i) printf("%d %d %d %d\n", tbl[i].Xpocz, tbl[i].Xkon, tbl[i].Ypocz, tbl[i].Ykon); 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 | #include <cstdio> #include <cstdlib> #define NAJW_PLEMION 100 ## 000 struct prostokat { int Xpocz, Xkon, Ypocz, Ykon; }; int rosnaco(const void * a, const void * b) { prostokat A = *(prostokat *) a; prostokat B = *(prostokat *) b; if (A.Xpocz != B.Xpocz) return A.Xpocz - B.Xpocz; else if (A.Xkon != B.Xkon) return A.Xkon - B.Xkon; else if (A.Ypocz != B.Ypocz) return A.Ypocz - B.Ypocz; else return A.Ykon - B.Ykon; } int main() { int plemion, i, j; prostokat tbl[NAJW_PLEMION]; bool zmiana = true; scanf("%d", &plemion); for(i=0;i<plemion;++i) { scanf("%d %d %d %d", &tbl[i].Xpocz, &tbl[i].Xkon, &tbl[i].Ypocz, &tbl[i].Ykon); if (tbl[i].Xkon < tbl[i].Xpocz) { tbl[i].Xkon ^= tbl[i].Xpocz; tbl[i].Xpocz ^= tbl[i].Xkon; tbl[i].Xkon ^= tbl[i].Xpocz; } if (tbl[i].Ykon < tbl[i].Ypocz) { tbl[i].Ykon ^= tbl[i].Ypocz; tbl[i].Ypocz ^= tbl[i].Ykon; tbl[i].Ykon ^= tbl[i].Ypocz; } } while (zmiana) { zmiana = false; for (i=0;i<plemion;++i) { j = i+1; while (j<plemion) { if (tbl[i].Xpocz < tbl[j].Xkon && tbl[j].Xpocz < tbl[i].Xkon && tbl[i].Ypocz < tbl[j].Ykon && tbl[j].Ypocz < tbl[i].Ykon) { tbl[i].Xpocz = tbl[i].Xpocz < tbl[j].Xpocz? tbl[i].Xpocz: tbl[j].Xpocz; tbl[i].Xkon = tbl[i].Xkon > tbl[j].Xkon? tbl[i].Xkon: tbl[j].Xkon; tbl[i].Ypocz = tbl[i].Ypocz < tbl[j].Ypocz? tbl[i].Ypocz: tbl[j].Ypocz; tbl[i].Ykon = tbl[i].Ykon > tbl[j].Ykon? tbl[i].Ykon: tbl[j].Ykon; --plemion; tbl[j].Xpocz = tbl[plemion].Xpocz; tbl[j].Xkon = tbl[plemion].Xkon; tbl[j].Ypocz = tbl[plemion].Ypocz; tbl[j].Ykon = tbl[plemion].Ykon; zmiana = true; } else ++j; } } } qsort(tbl, plemion, sizeof *tbl, rosnaco); printf("%d\n", plemion); for (i=0;i<plemion;++i) printf("%d %d %d %d\n", tbl[i].Xpocz, tbl[i].Xkon, tbl[i].Ypocz, tbl[i].Ykon); return 0; } |