题意

有一个n*m的矩形,里面有k个炸弹,给出每个炸弹的坐标,计算在n*m的矩形中有多少子矩形内是不包含炸弹的。

分析

场上很是懵逼,赛后问学长说是容斥定理?一脸懵逼。。容斥不是初中奥数用在集合上的东西吗(雾

先贴一下容斥的学习博客(貌似是我学长?):https://blog.csdn.net/usher_ou/article/details/68927439

还有这个题的参考博客:https://blog.csdn.net/lyg_air/article/details/77606691

侵删。

首先我们来看一个预备知识:

对于一个n*m的矩阵,它的子矩阵有多少个?我们可以看作一个组合的问题:在横着的n+1条边里选出两条来,从竖着的m+1条边里选出两条一共有多少选法?显然是C(2,n+1)*C(2,m+1)=n(n+1)/2*m(m+1)/2。

容斥定理就是通过加加减减来求一个并集。对于这个题我们可以通过考虑它的逆问题来用容斥定理,它的逆问题显然是:有多少子矩阵包含至少一个炸弹。那么就是先把只含有一个炸弹的加起来,再减去含有两个炸弹的,再加上含有三个炸弹的····

这是这个题的主要思路。那么还有两个小问题

1 怎么枚举炸弹的数量?因为K最多只要20那么可以通过二进制进行枚举

2 怎么计算包含某些数目炸弹的矩阵数?和上面计算n*m子矩阵的方法类似(一样),也是通过组合的方法。来看这张图

比如要计算包含这三个点的举行数目,我们可以通过计算这三个点最大最小的横纵坐标确定一个范围,然后从这个范围外选边就可以了,写出来就是:minx*miny*(n-maxx+1)*(m-maxy+1);

嗯,就是这样~A掉人生第一个容斥~

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> using namespace std;
typedef long long LL;
typedef unsigned long long ull;
const int maxn=+;
const int INF=;
struct Node{
long long x,y;
}node[maxn];
long long T,n,m,k; int main(){
scanf("%d",&T);
for(int t=;t<=T;t++){
scanf("%lld%lld%lld",&n,&m,&k);
for(int i=;i<k;i++){
scanf("%d%d",&node[i].x,&node[i].y);
}
LL ans=n*(n+)/*m*(m+)/;
for(int i=;i<(<<k);i++){
LL minx=INF,miny=INF,maxx=-INF,maxy=-INF;
int cnt=;
for(int j=;j<k;j++){
if(<<j&i){
cnt++;
minx=min(minx,node[j].x);
miny=min(miny,node[j].y);
maxx=max(maxx,node[j].x);
maxy=max(maxy,node[j].y);
}
}
LL res=minx*miny*(n-maxx+)*(m-maxy+);
//cout<<res<<endl;
if(cnt%)
ans-=res;
else
ans+=res;
}
printf("%lld\n",ans);
}
return ;
}

Gym 101350G - Snake Rana的更多相关文章

  1. Gym - 101350G Snake Rana(容器原理)

    Old Macdonald wants to build a new hen house for his hens. He buys a new rectangular area of size N  ...

  2. 组队赛Day1第一场 GYM 101350 G - Snake Rana (容斥)

    [题意] 给一个N×M的矩阵, K个地雷的坐标.求不含地雷的所有矩形的总数. T组数据. N M都是1e4,地雷数 K ≤ 20 Input 3 2 2 1 2 2 6 6 2 5 2 2 5 100 ...

  3. 容斥 或者 单调栈 hihocoder #1476 : 矩形计数 和 G. Snake Rana 2017 ACM Arabella Collegiate Programming Contest

    先说一个简单的题目(题目大意自己看去,反正中文):hihocoder上的:http://hihocoder.com/problemset/problem/1476 然后因为这个n和m的矩阵范围是100 ...

  4. GYM 101350 G

    G. Snake Rana time limit per test 4.0 s memory limit per test 256 MB input standard input output sta ...

  5. 2017 ACM Arabella Collegiate Programming Contest div2的题,部分题目写个题解

    F. Monkeying Around   维护点在多少个线段上 http://codeforces.com/gym/101350/problem/F 题意:有m个笑话,每个笑话的区间是[L, R], ...

  6. 2017 ACM Arabella Collegiate Programming Contest(solved 9/13, complex 12/13)

    A.Sherlock Bones 题意: 给出长度为n的01串,问f(i,j)=f(j,k),(i<j<k)的i,j,k取值种数.其中f(i,j)表示[i,j]内1的个数, 且s[j]必须 ...

  7. codeforce gym/100495/problem/F Snake++——DFS应用

    emmmm.... 在被新生暴打后,我花了很久才补出这道DFS.由于WA1检查了半天,最后竟然是输出少了一个:   ,心态小崩. 这里普通的dfs算出的连通区域并不能直接当做最后的答案.所以需要类似模 ...

  8. [LeetCode] Design Snake Game 设计贪吃蛇游戏

    Design a Snake game that is played on a device with screen size = width x height. Play the game onli ...

  9. ACM: Gym 101047M Removing coins in Kem Kadrãn - 暴力

     Gym 101047M Removing coins in Kem Kadrãn Time Limit:2000MS     Memory Limit:65536KB     64bit IO Fo ...

随机推荐

  1. TCP服务器端口数,最大连接数以及MaxUserPort的关系辨真

    原文连接:http://www.jianshu.com/p/4a58761d758f 关于TCP服务器最大并发连接数有一种误解就是"因为端口号上限为65535,所以TCP服务器理论上的可承载 ...

  2. kafka系列之(3)——Coordinator与offset管理和Consumer Rebalance

    from:http://www.jianshu.com/p/5aa8776868bb kafka系列之(3)——Coordinator与offset管理和Consumer Rebalance 时之结绳 ...

  3. UI多线程调用:线程间操作无效: 从不是创建控件"Form1"的线程访问它.

    有两种方式解决 1.在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false;2.使用Invoke等委托函数. 问题原因是.net2.0以后拒绝多 ...

  4. js 预解析

    前言 JavaScript是解释型语言是毋庸置疑的,但它是不是仅在运行时自上往下一句一句地解析的呢? 事实上或某种现象证明并不是这样的,通过<JavaScript权威指南>及网上相关资料了 ...

  5. POJ3764,BZOJ1954 The xor-longest Path

    题意 In an edge-weighted tree, the xor-length of a path p is defined as the xor sum of the weights of ...

  6. 谷歌(google)世界各国网址大全

    谷歌(google)世界各国网址大全世界各国google网址 国家    网址         国家主要语言 亚洲:中国  google.cn 汉语蒙古 google.mn蒙古语韩国 google.c ...

  7. dubbox消费者启动成功,却无法连接注册中心

    使用dubbox作为服务提供端很好实现,因为git的说明和网上有很多的例子可供参考,但是消费端都一笔带过,简单得很,初学者往往以为只要配置如下3样东西就够了: <?xml version=&qu ...

  8. laravel查看sql语句

    我自己是用第一种方法来调试的,第三种不行 不知道为啥 laravel查看sql语句 方法一: 我们有时候想测试一段代码生产的 SQL 语句,比如: 我们想看 App\User::all(); 产生的 ...

  9. JDK 8 - Lambda Expression 的优点与限制

    我们知道 JDK 8 新增了 Lambda Expression 这一特性. JDK 8 为什么要新增这个特性呢? 这个特性给 JDK 8 带来了什么好处? 它可以做什么?不可以做什么? 在这篇文章, ...

  10. PHP传入数组到js

    1.方式一,处理成字符串 js再将字符串处理成数组. var spec1_default = "{$spec1_default}"; spec1_default = spec1_d ...