矩形重疊
阿新 • • 發佈:2018-04-04
最大值 int pan bits 計算 nbsp namespace 最大 OS
題目:
平面內有
n
個矩形, 第i
個矩形的左下角坐標為, 右上角坐標為。
如果兩個或者多個矩形有公共區域則認為它們是相互重疊的(不考慮邊界和角落)。
請你計算出平面內重疊矩形數量最多的地方,有多少個矩形相互重疊。輸入描述:
輸入包括五行。
第一行包括一個整數n
, 表示矩形的個數。
第二行包括n
個整數,表示左下角的橫坐標。
第三行包括n
個整數,表示左下角的縱坐標。
第四行包括n
個整數,表示右上角的橫坐標。
第五行包括n
個整數,表示右上角的縱坐標。輸出描述:
輸出一個正整數, 表示最多的地方有多少個矩形相互重疊,如果矩形都不互相重疊,輸出1。
樣例:
in: 2 0 90 0 90 100 200 100 200 out: 2
將n個矩形輪流作為被覆蓋區域,每次被覆蓋則更新區域,n次後求出最大值即可。
AC代碼:
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 struct node{ 5 int x1,y1,x2,y2; 6 bool operator < (const node&node1) const{ 7 if(x1!=node1.x1){ 8 returnx1<node1.x1; 9 } 10 if(y1!=node1.y1){ 11 return y1<node1.y1; 12 } 13 if(x2!=node1.x2){ 14 return x2<node1.x2; 15 } 16 else{ 17 return y2<node1.y2; 18 } 19 } 20 }a[60]; 21 22 int main(){23 int n; 24 cin>>n; 25 for(int i=0;i<n;i++){ 26 cin>>a[i].x1; 27 } 28 for(int i=0;i<n;i++){ 29 cin>>a[i].y1; 30 } 31 for(int i=0;i<n;i++){ 32 cin>>a[i].x2; 33 } 34 for(int i=0;i<n;i++){ 35 cin>>a[i].y2; 36 } 37 sort(a,a+n); 38 int ans=0; 39 for(int i=0;i<n;i++){ 40 int cnt=0,x1=a[i].x1,y1=a[i].y1,x2=a[i].x2,y2=a[i].y2; 41 for(int j=0;j<n;j++){ 42 if(a[j].x1<x2&&a[j].y1<y2&&a[j].x2>x1&&a[j].y2>y1){ 43 x1=max(x1,a[j].x1); 44 y1=max(y1,a[j].y1); 45 x2=min(x2,a[j].x2); 46 y2=min(y2,a[j].y2); 47 cnt++; 48 } 49 } 50 ans=max(cnt,ans); 51 } 52 cout<<ans<<endl; 53 return 0; 54 }
矩形重疊