#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; } |
English