#include <cstdio> #include <algorithm> #define fr first #define sc second using namespace std; typedef pair<pair<int,int>,pair<int,int> > quatrint; bool intersect(int i,int j,int i1,int j1,int a,int b,int a1,int b1) { if (i==-1 || a==-1) return false; int ax,ay,bx,by; ax=max(i,a); ay=max(j,b); bx=min(i1,a1); by=min(j1,b1); return ax<bx && ay<by; // orig: return (\ (((i>=a) && (i<=a1)) && ((j>=b)&&(j<=b1))) || \ (((a>=i) && (a<=i1)) && ((b>=j)&&(b<=j1))) || \ (((i1>=a) && (i1<=a1)) && ((j1>=b)&&(j1<=b1))) || \ (((a1>=i) && (a1<=i1)) && ((b1>=j)&&(b1<=j1))) \ ); } bool isect(quatrint a, quatrint b) { return intersect(a.fr.fr,a.sc.fr,a.fr.sc,a.sc.sc,b.fr.fr,b.sc.fr,b.fr.sc,b.sc.sc); /* if ( true ) { return true; puts("fusion!"); } return false; */ } int main() { int n, n2, i, j; scanf("%d", &n); quatrint tab[n]; for (i=0; i<n; i++) scanf("%d%d%d%d", &tab[i].fr.fr,&tab[i].fr.sc,&tab[i].sc.fr,&tab[i].sc.sc); n2=n; NotSoGood: for (i=0; i<n; i++) { for (j=i+1; j<n; j++) { if (isect(tab[i],tab[j])) { tab[i].fr.fr=min(tab[i].fr.fr,tab[j].fr.fr); tab[j].fr.fr=-1; tab[i].fr.sc=max(tab[i].fr.sc,tab[j].fr.sc); tab[j].fr.sc=-1; tab[i].sc.fr=min(tab[i].sc.fr,tab[j].sc.fr); tab[j].sc.fr=-1; tab[i].sc.sc=max(tab[i].sc.sc,tab[j].sc.sc); tab[j].sc.sc=-1; n2--; goto NotSoGood; } } } printf("%d\n",n2); sort(tab, tab+n); for (i=n-n2; i<n; i++) printf("%d %d %d %d\n",tab[i].fr.fr,tab[i].fr.sc,tab[i].sc.fr,tab[i].sc.sc); 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 | #include <cstdio> #include <algorithm> #define fr first #define sc second using namespace std; typedef pair<pair<int,int>,pair<int,int> > quatrint; bool intersect(int i,int j,int i1,int j1,int a,int b,int a1,int b1) { if (i==-1 || a==-1) return false; int ax,ay,bx,by; ax=max(i,a); ay=max(j,b); bx=min(i1,a1); by=min(j1,b1); return ax<bx && ay<by; // orig: return (\ (((i>=a) && (i<=a1)) && ((j>=b)&&(j<=b1))) || \ (((a>=i) && (a<=i1)) && ((b>=j)&&(b<=j1))) || \ (((i1>=a) && (i1<=a1)) && ((j1>=b)&&(j1<=b1))) || \ (((a1>=i) && (a1<=i1)) && ((b1>=j)&&(b1<=j1))) \ ); } bool isect(quatrint a, quatrint b) { return intersect(a.fr.fr,a.sc.fr,a.fr.sc,a.sc.sc,b.fr.fr,b.sc.fr,b.fr.sc,b.sc.sc); /* if ( true ) { return true; puts("fusion!"); } return false; */ } int main() { int n, n2, i, j; scanf("%d", &n); quatrint tab[n]; for (i=0; i<n; i++) scanf("%d%d%d%d", &tab[i].fr.fr,&tab[i].fr.sc,&tab[i].sc.fr,&tab[i].sc.sc); n2=n; NotSoGood: for (i=0; i<n; i++) { for (j=i+1; j<n; j++) { if (isect(tab[i],tab[j])) { tab[i].fr.fr=min(tab[i].fr.fr,tab[j].fr.fr); tab[j].fr.fr=-1; tab[i].fr.sc=max(tab[i].fr.sc,tab[j].fr.sc); tab[j].fr.sc=-1; tab[i].sc.fr=min(tab[i].sc.fr,tab[j].sc.fr); tab[j].sc.fr=-1; tab[i].sc.sc=max(tab[i].sc.sc,tab[j].sc.sc); tab[j].sc.sc=-1; n2--; goto NotSoGood; } } } printf("%d\n",n2); sort(tab, tab+n); for (i=n-n2; i<n; i++) printf("%d %d %d %d\n",tab[i].fr.fr,tab[i].fr.sc,tab[i].sc.fr,tab[i].sc.sc); return 0; } |