#include<stdio.h> #include<algorithm> using namespace std; struct rect { int a1,a2,b1,b2; }; bool cmp(const rect &x, const rect &y) { if(x.a1 == y.a1) return x.b1 < x.b2; return x.a1 < y.a1; } bool cmp2(const rect &x, const rect &y) { if(x.a1 == y.a1 && x.a2 == y.a2 && x.b1 == y.b1) return x.b2 < y.b2; if(x.a1 == y.a1 && x.a2 == y.a2) return x.b1 < y.b1; if(x.a1 == y.a1) return x.a2 < y.a2; return x.a1 < y.a1; } int n; rect T[100010]; inline bool overlap(rect &x, rect &y) { if(x.a1 < y.a2 && x.a2 > y.a1 && x.b1<y.b2 && x.b2>y.b1) return true; return false; } int main() { scanf("%d", &n); for(int i=0;i<n;i++) { scanf("%d %d %d %d", &T[i].a1, &T[i].a2, &T[i].b1, &T[i].b2); } sort(T, T+n,cmp); int q1=0,q2=1; while(q1 < n) { if(T[q1].a1 == -1) { q1++; continue; } for(int i=0;i<n;i++) { if(i == q1 || T[i].a1 == -1) continue; if(overlap(T[q1], T[i])) { T[q1].a1=min(T[i].a1, T[q1].a1); T[q1].a2=max(T[i].a2, T[q1].a2); T[q1].b1=min(T[i].b1, T[q1].b1); T[q1].b2=max(T[i].b2, T[q1].b2); T[i].a1 = -1; q1--; break; } } q1++; } sort(T,T+n,cmp2); int q=0; for(int i=0;i<n;i++) { if(T[i].a1 != -1) q++; } printf("%d\n", q); for(int i=n-q;i<n;i++) { printf("%d %d %d %d\n", T[i].a1,T[i].a2,T[i].b1,T[i].b2); } 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 | #include<stdio.h> #include<algorithm> using namespace std; struct rect { int a1,a2,b1,b2; }; bool cmp(const rect &x, const rect &y) { if(x.a1 == y.a1) return x.b1 < x.b2; return x.a1 < y.a1; } bool cmp2(const rect &x, const rect &y) { if(x.a1 == y.a1 && x.a2 == y.a2 && x.b1 == y.b1) return x.b2 < y.b2; if(x.a1 == y.a1 && x.a2 == y.a2) return x.b1 < y.b1; if(x.a1 == y.a1) return x.a2 < y.a2; return x.a1 < y.a1; } int n; rect T[100010]; inline bool overlap(rect &x, rect &y) { if(x.a1 < y.a2 && x.a2 > y.a1 && x.b1<y.b2 && x.b2>y.b1) return true; return false; } int main() { scanf("%d", &n); for(int i=0;i<n;i++) { scanf("%d %d %d %d", &T[i].a1, &T[i].a2, &T[i].b1, &T[i].b2); } sort(T, T+n,cmp); int q1=0,q2=1; while(q1 < n) { if(T[q1].a1 == -1) { q1++; continue; } for(int i=0;i<n;i++) { if(i == q1 || T[i].a1 == -1) continue; if(overlap(T[q1], T[i])) { T[q1].a1=min(T[i].a1, T[q1].a1); T[q1].a2=max(T[i].a2, T[q1].a2); T[q1].b1=min(T[i].b1, T[q1].b1); T[q1].b2=max(T[i].b2, T[q1].b2); T[i].a1 = -1; q1--; break; } } q1++; } sort(T,T+n,cmp2); int q=0; for(int i=0;i<n;i++) { if(T[i].a1 != -1) q++; } printf("%d\n", q); for(int i=n-q;i<n;i++) { printf("%d %d %d %d\n", T[i].a1,T[i].a2,T[i].b1,T[i].b2); } return 0; } |