HDU 2461 Rectangles(容斥原理)

2021-07-16 03:05:38 字數 775 閱讀 4330

題意:給出n個矩形的左下角和右上角座標,要求進行m次操作,每次對t個矩形進行塗色(給出這t個矩形的序號),要求計算出每次塗色時需要塗色的面積。(塗色可以覆蓋,即每次操作不受前面任何操作的影響)。

分析:矩形之間可以覆蓋,每次操作要計算覆蓋後圖形的面積,這裡就要用到容斥原理

。每次操作時有如下關係式

需要塗色的面積=t個矩形的面積和-任意兩個矩形相交的面積+任意三個矩形相交的面積-...+(-1)^(t-1)*t個矩形相交的面積

計算相交矩形的面積通過結構體成員函式來實現,dfs計算結果,搜尋時當相交面積為0時不可能再和後面要搜尋的矩形構成相交部分,此時停止搜尋。

#include#include#include#include#include#includeusing namespace std;

struct rect

rect cross(const rect &r) //返回兩個矩形相交部分的矩形

};int n,m;

rect r[25];

int ans;

int mm;

int t[25];

void dfs(int i,rect temp,int num)

{ temp=temp.cross(r[t[i]]);

int area=temp.area();

if(area==0) return; //這個剪枝非常重要,否則tle

if(num&1) ans+=area;

else ans-=area;

for(int j=i+1;j

poj 3695 Rectangles 容斥原理

在容斥原理題單裡看到這個題,第一想法肯定是掃瞄線啊。但一看題單分析,還真是容斥。矩形相交的圖形和文氏圖差不多。然後dfs容斥就好了 題單裡第四題 include include include using namespace std struct rec rec rec 30 int nums 30...

hdu 2461 容斥原理 Rectangle

題意 給你n n很小 個長方形,求這中間任意長方形的面積並。題解 容斥原理。include include include using namespace std int n,q struct recrec 30 int s 1 20 3 a 22 cnt,add,id rec intersec r...

hdu2197 本原串(容斥)

pro blem desc ript io nproblem description proble mdes crip tion 由 0和 1組成的 串中,不 能表示為 由幾個相 同的較小 的串連線 成的串,稱為本原 串,有多 少個長為 n n 100000000 的 本原串?由0和1組成的串中,不...