码迷,mamicode.com
首页 > 其他好文 > 详细

hiho 1476 - 矩形计数 容斥

时间:2018-01-26 14:03:58      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:不同的   idt   coder   dia   amp   off   target   ges   def   

题目链接

如图所示,在由N行M列个单位正方形组成的矩形中,有K个单位正方形是黑色的,其余单位正方形是白色的。  

技术分享图片

你能统计出一共有多少个不同的子矩形是完全由白色单位正方形组成的吗?

----------------------------------------------------------------------------------------------------

思路:

完全白色矩形数目 = 总个数 - 包含黑块的矩形数目。

包含黑块的矩形数目 = 包含一个黑块 - 包含两个黑块 + 包含三个黑块……

#include <cstdio>
#include <cstring>
#define MAX(a,b) (a>b?a:b)
#define MIN(a,b) (a<b?a:b)
#define OO 11111
int coords[1111][2];
int main(){
    long long m,n;
    int left,right,top,bottom;
    int k,cnt,curs;
    while(scanf("%lld%lld%d",&n,&m,&k)!=EOF){
        for(int i=0;i<k;i++) scanf("%d %d",&coords[i][0],&coords[i][1]);
        long long ret = n*(n+1)/2*m*(m+1)/2;
        for(int s=1;s<(1<<k);s++) {
             curs=s; cnt=0;
             left=top=OO;
             right=bottom=-OO;
             for(int i=0;i<k;i++){
                 if(curs&1){
                    cnt++;
                    left=MIN(left,coords[i][1]);
                    right=MAX(right,coords[i][1]);
                    top=MIN(top,coords[i][0]);
                    bottom=MAX(bottom,coords[i][0]);    
                }
                curs>>=1;
             }
             int sgn=(cnt%2)?(-1):1;
             ret += sgn*left*top*(n+1-bottom)*(m+1-right);
        }
        printf("%lld\n",ret);
    }
    return 0;
}

 

hiho 1476 - 矩形计数 容斥

标签:不同的   idt   coder   dia   amp   off   target   ges   def   

原文地址:https://www.cnblogs.com/redips-l/p/8358914.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!