#include <iostream> #include <vector> #include <set> #include <list> #include <algorithm> using namespace std; int n; struct xxx{ int x1, x2, y1, y2; }tmp; list <xxx> v; list <xxx>::iterator it; list <xxx>::iterator it2; list <xxx>::iterator tmpit; list <xxx>::iterator tmpit2; bool cmp(xxx a, xxx b){ if(a.x1!=b.x1) return a.x1<b.x1; if(a.x2!=b.x2) return a.x2<b.x2; if(a.y1!=b.y1) return a.y1<b.y1; return a.y2<b.y2; } bool czy_wspolne(xxx a, xxx b){ if(a.x1<=b.x1 && a.x2 > b.x1){ if(a.y1<=b.y1 && a.y2 > b.y1) return true; if(a.y1<=b.y2 && a.y1 > b.y1) return true; } if(a.x1<=b.x2 && a.x1 > b.x1){ if(a.y1<=b.y1 && a.y2 > b.y1) return true; if(a.y1<=b.y2 && a.y1 > b.y1) return true; } return false; } int main(){ ios_base::sync_with_stdio(0); cin>>n; for(int i=0; i<n; i++){ cin>>tmp.x1>>tmp.x2>>tmp.y1>>tmp.y2; v.push_back(tmp); } for(it=v.begin(); it!=v.end(); ++it){ for(it2=v.begin(); it2!=v.end(); ++it2){ if(it==it2)continue; if(czy_wspolne(*it, *it2)){ tmp.x1=min(it->x1, it2->x1); tmp.x2=max(it->x2, it2->x2); tmp.y1=min(it->y1, it2->y1); tmp.y2=max(it->y2, it2->y2); tmpit=it; tmpit2=it2; it++; it2++; v.erase(tmpit); v.erase(tmpit2); it--; it2--; v.push_back(tmp); } } } v.sort(cmp); cout<<v.size()<<"\n"; for(it=v.begin(); it!=v.end(); ++it) cout<<it->x1<<" "<<it->x2<<" "<<it->y1<<" "<<it->y2<<"\n"; 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 | #include <iostream> #include <vector> #include <set> #include <list> #include <algorithm> using namespace std; int n; struct xxx{ int x1, x2, y1, y2; }tmp; list <xxx> v; list <xxx>::iterator it; list <xxx>::iterator it2; list <xxx>::iterator tmpit; list <xxx>::iterator tmpit2; bool cmp(xxx a, xxx b){ if(a.x1!=b.x1) return a.x1<b.x1; if(a.x2!=b.x2) return a.x2<b.x2; if(a.y1!=b.y1) return a.y1<b.y1; return a.y2<b.y2; } bool czy_wspolne(xxx a, xxx b){ if(a.x1<=b.x1 && a.x2 > b.x1){ if(a.y1<=b.y1 && a.y2 > b.y1) return true; if(a.y1<=b.y2 && a.y1 > b.y1) return true; } if(a.x1<=b.x2 && a.x1 > b.x1){ if(a.y1<=b.y1 && a.y2 > b.y1) return true; if(a.y1<=b.y2 && a.y1 > b.y1) return true; } return false; } int main(){ ios_base::sync_with_stdio(0); cin>>n; for(int i=0; i<n; i++){ cin>>tmp.x1>>tmp.x2>>tmp.y1>>tmp.y2; v.push_back(tmp); } for(it=v.begin(); it!=v.end(); ++it){ for(it2=v.begin(); it2!=v.end(); ++it2){ if(it==it2)continue; if(czy_wspolne(*it, *it2)){ tmp.x1=min(it->x1, it2->x1); tmp.x2=max(it->x2, it2->x2); tmp.y1=min(it->y1, it2->y1); tmp.y2=max(it->y2, it2->y2); tmpit=it; tmpit2=it2; it++; it2++; v.erase(tmpit); v.erase(tmpit2); it--; it2--; v.push_back(tmp); } } } v.sort(cmp); cout<<v.size()<<"\n"; for(it=v.begin(); it!=v.end(); ++it) cout<<it->x1<<" "<<it->x2<<" "<<it->y1<<" "<<it->y2<<"\n"; return 0; } |