矩形面积并 容斥原理解法

容斥原理可求:A的并 或者!A的交

A的并注意枚举时不要枚举0

#include<cstdio>
#include<algorithm>
using namespace std;
struct rec{
    int x1,x2,y1,y2;
}p[20];
int main(){
    int i,j,n,k,cnt,as,x1,x2,y1,y2;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d%d%d%d",&p[i].x1,&p[i].y2,&p[i].x2,&p[i].y1);
    k=1<<n;
    as=0;
    for(i=1;i<k;i++){
        cnt=0;
        x1=y1=-100000;
        x2=y2=100000;
        for(j=0;j<n;j++)
            if(i>>j&1){
                    cnt++;
                    x1=max(x1,p[j].x1);
                    y1=max(y1,p[j].y1);
                    x2=min(x2,p[j].x2);
                    y2=min(y2,p[j].y2);
            }
        if(x2>=x1&&y2>=y1)
            as+=(x2-x1)*(y2-y1)*(cnt%2?1:-1);
    }
    printf("%d\n",as);
    return 0;
}


你可能感兴趣的:(容斥原理)