矩形面积
描述
桌面上放了N個平行于坐標軸的矩形,這N個矩形可能有互相覆蓋的部分,求它們組成的圖形的面積。
格式
輸入格式
輸入第一行為一個數N(1≤N≤100),表示矩形的數量。下面N行,每行四個整數,分別表示每個矩形的左下角和右上角的坐標,坐標范圍為–10^8到10^8之間的整數。
輸出格式
輸出只有一行,一個整數,表示圖形的面積。
樣例1
樣例輸入1
3 1 1 4 3 2 -1 3 2 4 0 5 2
樣例輸出1
10
第一次知道有離散化
1 #include<iostream>
2 #include<cstring>
3 #include<cstdio>
4 #include<algorithm>
5 #define LL long long
6 using namespace std;
7 struct node
8 {
9 LL x1,x2,y1,y2;
10 }a[105];
11 bool cmp(int a,int b)
12 {
13 return a<b;
14 }
15 LL x[205],y[205];
16 bool p[205][205];
17 int main()
18 {
19 long long n,ans=0,l;
20 scanf("%lld",&n);
21 for(LL i=1;i<=n;i++)
22 {
23 scanf("%lld%lld%lld%lld",&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2);
24 x[i*2]=a[i].x1;
25 x[i*2-1]=a[i].x2;
26 y[i*2]=a[i].y1;
27 y[i*2-1]=a[i].y2;
28 }
29 sort(x+1,x+2*n+1,cmp);
30 sort(y+1,y+2*n+1,cmp);
31 for(LL i=1;i<=n;i++)
32 for(LL X=1;X<n*2;X++)
33 {
34 if(a[i].x2<=x[X]) break;
35 if(a[i].x1>=x[X+1]) continue;
36 for(int Y=1;Y<n*2;Y++)
37 {
38 if(a[i].y2<=y[Y]) break;
39 if(a[i].y1>=y[Y+1]) continue;
40 p[X][Y]=1;
41 }
42 }
43 for(LL X=1;X<n*2;X++)
44 {
45 l=x[X+1]-x[X];
46 for(int Y=1;Y<n*2;Y++)
47 if(p[X][Y])
48 ans+=l*(y[Y+1]-y[Y]);
49 }
50 cout<<ans;
51 return 0;
52 }
View Code
以上 by dajuruo LQ_double
總結
- 上一篇: 郴怎么念(湖南郴州旅游攻略景点必去)
- 下一篇: 马斯克重组X:只负责产品与工程团队 与新