矩形并的面积(51Nod-2488)
生活随笔
收集整理的這篇文章主要介紹了
矩形并的面积(51Nod-2488)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
在二維平面上,給定兩個矩形,滿足矩形的每條邊分別和坐標軸平行,求這個兩個矩形的并的面積。即它們重疊在一起的總的面積。
輸入
8個數,分別表示第一個矩形左下角坐標為(A,B),右上角坐標為(C,D);第二個矩形左下角坐標為(E,F),右上角坐標為(G,H)。
保證A<C,B<D,E<G,F<H。
保證所有數的絕對值不超過2*10^9,矩形并的面積≤2*10^9。
輸出
輸出一個數表示矩陣并的面積。
輸入樣例
-3 0 3 4 0 -1 9 2
輸出樣例
45
思路:簡單容斥原理,注意判斷一下相交面積是否合法即可
源程序
#include<iostream> #include<cstdio> #include<cstdlib> #include<string> #include<cstring> #include<cmath> #include<ctime> #include<algorithm> #include<utility> #include<stack> #include<queue> #include<vector> #include<set> #include<map> #define EPS 1e-9 #define PI acos(-1.0) #define INF 0x3f3f3f3f #define LL long long const int MOD = 1E9+7; const int N = 2000+5; const int dx[] = {0,0,-1,1,-1,-1,1,1}; const int dy[] = {-1,1,0,0,-1,1,-1,1}; using namespace std; struct Node{LL x;LL y; }A1,A2,B1,B2,C1,C2; int main(){scanf("%lld%lld%lld%lld",&A1.x,&A1.y,&A2.x,&A2.y);scanf("%lld%lld%lld%lld",&B1.x,&B1.y,&B2.x,&B2.y);C1.x=max(min(A1.x,A2.x),min(B1.x,B2.x));C1.y=max(min(A1.y,A2.y),min(B1.y,B2.y));C2.x=min(max(A1.x,A2.x),max(B1.x,B2.x));C2.y=min(max(A1.y,A2.y),max(B1.y,B2.y));LL s1=(A2.x-A1.x)*(A2.y-A1.y);LL s2=(B2.x-B1.x)*(B2.y-B1.y);LL s3=(C2.x-C1.x)*(C2.y-C1.y);if(C2.x>C1.x&&C2.y>C1.y)printf("%d\n",s1+s2-s3);elseprintf("%d\n",s1+s2);return 0; }?
總結
以上是生活随笔為你收集整理的矩形并的面积(51Nod-2488)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态规划 —— 线性 DP —— 序列问
- 下一篇: 线性结构——尺取法