#include<iostream> #include<algorithm> using namespace std; int tabx[100000][2]; int taby[100000][2]; int id[100000]; bool cmp(int a, int b) { if(tabx[a][0]<tabx[b][0]) return true; if(tabx[a][0]==tabx[b][0]) { if(tabx[a][1]<tabx[b][1]) return true; if(tabx[a][1]==tabx[b][1]) { if(taby[a][0]<taby[b][0]) return true; if(taby[a][0]==taby[b][0]) { if(taby[a][1]<taby[b][1]) return true; } } } return false; } int main() { int n=0, ile=0; cin>>n; ile=n; for(int i=0;i<n;i++) { cin>>tabx[i][0]>>tabx[i][1]>>taby[i][0]>>taby[i][1]; } for(int i=0;i<n;i++) { //cout<<tabx[i][0]<<tabx[i][1]<<taby[i][0]<<taby[i][1]<<endl; } int tabx11, tabx12, tabx21, tabx22, taby11, taby12, taby21, taby22; bool zmiana=true; while(zmiana){ zmiana=false; for(int i=0;i<n-1;i++) { if(tabx[i][0]==0 && tabx[i][1]==0 && taby[i][0]==0 && taby[i][1]==0) continue; int a, b, c, d; for(int j=i+1;j<n;j++) { tabx11=tabx[i][0]; tabx12=tabx[i][1]; taby11=taby[i][0]; taby12=taby[i][1]; tabx21=tabx[j][0]; tabx22=tabx[j][1]; taby21=taby[j][0]; taby22=taby[j][1]; // cout<<"robie"<<endl; if(tabx[j][0]==0 && tabx[j][1]==0 && taby[j][0]==0 && taby[j][1]==0) continue; a=max(tabx11, tabx21); b=min(taby12, taby22); c=min(tabx12, tabx22); d=max(taby11, taby21); //cout<<"a= "<<a<<endl; // cout<<"b= "<<b<<endl; // cout<<"c= "<<c<<endl; // cout<<"d= "<<d<<endl; if(a<c && d<b) { tabx[i][0]=min(tabx[i][0], tabx[j][0]); tabx[i][1]=max(tabx[i][1], tabx[j][1]); taby[i][0]=min(taby[i][0], taby[j][0]); taby[i][1]=max(taby[i][1], taby[j][1]); tabx[j][0]=0; tabx[j][1]=0; taby[j][0]=0; taby[j][1]=0; zmiana=true; ile--; } } } } for(int i=0;i<n;i++) id[i]=i; sort(id, id+n, cmp); /* for(int i=0;i<n;i++) { if(!(tabx[i][0]==0 && tabx[i][1]==0 && taby[i][0]==0 && taby[i][1]==0)) ile++; } */ int i=0; cout<<ile<<endl; for(int j=n-ile;j<n;j++) { i=id[j]; //if(tabx[i][0]==0 && tabx[i][1]==0 && taby[i][0]==0 && taby[i][1]==0) //continue; cout<<tabx[i][0]<<" "<<tabx[i][1]<<" "<<taby[i][0]<<" "<<taby[i][1]<<endl; } //cout<<ile<<endl; }
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 108 109 110 111 112 113 114 115 116 117 118 | #include<iostream> #include<algorithm> using namespace std; int tabx[100000][2]; int taby[100000][2]; int id[100000]; bool cmp(int a, int b) { if(tabx[a][0]<tabx[b][0]) return true; if(tabx[a][0]==tabx[b][0]) { if(tabx[a][1]<tabx[b][1]) return true; if(tabx[a][1]==tabx[b][1]) { if(taby[a][0]<taby[b][0]) return true; if(taby[a][0]==taby[b][0]) { if(taby[a][1]<taby[b][1]) return true; } } } return false; } int main() { int n=0, ile=0; cin>>n; ile=n; for(int i=0;i<n;i++) { cin>>tabx[i][0]>>tabx[i][1]>>taby[i][0]>>taby[i][1]; } for(int i=0;i<n;i++) { //cout<<tabx[i][0]<<tabx[i][1]<<taby[i][0]<<taby[i][1]<<endl; } int tabx11, tabx12, tabx21, tabx22, taby11, taby12, taby21, taby22; bool zmiana=true; while(zmiana){ zmiana=false; for(int i=0;i<n-1;i++) { if(tabx[i][0]==0 && tabx[i][1]==0 && taby[i][0]==0 && taby[i][1]==0) continue; int a, b, c, d; for(int j=i+1;j<n;j++) { tabx11=tabx[i][0]; tabx12=tabx[i][1]; taby11=taby[i][0]; taby12=taby[i][1]; tabx21=tabx[j][0]; tabx22=tabx[j][1]; taby21=taby[j][0]; taby22=taby[j][1]; // cout<<"robie"<<endl; if(tabx[j][0]==0 && tabx[j][1]==0 && taby[j][0]==0 && taby[j][1]==0) continue; a=max(tabx11, tabx21); b=min(taby12, taby22); c=min(tabx12, tabx22); d=max(taby11, taby21); //cout<<"a= "<<a<<endl; // cout<<"b= "<<b<<endl; // cout<<"c= "<<c<<endl; // cout<<"d= "<<d<<endl; if(a<c && d<b) { tabx[i][0]=min(tabx[i][0], tabx[j][0]); tabx[i][1]=max(tabx[i][1], tabx[j][1]); taby[i][0]=min(taby[i][0], taby[j][0]); taby[i][1]=max(taby[i][1], taby[j][1]); tabx[j][0]=0; tabx[j][1]=0; taby[j][0]=0; taby[j][1]=0; zmiana=true; ile--; } } } } for(int i=0;i<n;i++) id[i]=i; sort(id, id+n, cmp); /* for(int i=0;i<n;i++) { if(!(tabx[i][0]==0 && tabx[i][1]==0 && taby[i][0]==0 && taby[i][1]==0)) ile++; } */ int i=0; cout<<ile<<endl; for(int j=n-ile;j<n;j++) { i=id[j]; //if(tabx[i][0]==0 && tabx[i][1]==0 && taby[i][0]==0 && taby[i][1]==0) //continue; cout<<tabx[i][0]<<" "<<tabx[i][1]<<" "<<taby[i][0]<<" "<<taby[i][1]<<endl; } //cout<<ile<<endl; } |