UVa 11806 Cheerleaders (容斥原理+二进制表示状态)
In most professional sporting events, cheerleaders play a major role in entertaining the spectators. Their
roles are substantial during breaks and prior to start of play. The world cup soccer is no exception.
Usually the cheerleaders form a group and perform at the centre of the eld. In addition to this group,
some of them are placed outside the side line so they are closer to the spectators. The organizers would
like to ensure that at least one cheerleader is located on each of the four sides. For this problem, we
will model the playing ground as an M N rectangular grid. The constraints for placing cheerleaders
are described below:
There should be at least one cheerleader on each of the four sides. Note that, placing a cheerleader
on a corner cell would cover two sides simultaneously.
There can be at most one cheerleader in a cell.
All the cheerleaders available must be assigned to a cell. That is, none of them can be left out.
The organizers would like to know, how many ways they can place the cheerleaders while maintaining
the above constraints. Two placements are different, if there is at least one cell which contains a
cheerleader in one of the placement but not in the other.
Input
The rst line of input contains a positive integer T 50, which denotes the number of test cases. T
lines then follow each describing one test case. Each case consists of three nonnegative integers, 2 M,
N 20 and K 500. Here M is the number of rows and N is the number of columns in the grid. K
denotes the number of cheerleaders that must be assigned to the cells in the grid.
Output
For each case of input, there will be one line of output. It will rst contain the case number followed by
the number of ways to place the cheerleaders as described earlier. Look at the sample output for exact
formatting. Note that, the numbers can be arbitrarily large. Therefore you must output the answers
modulo 1000007.
Sample Input
2
2 2 1
2 3 2
Sample Output
Case 1: 0
Case 2: 2
给你一个n*m大的操场,上面站上k个啦啦队元,每个格子最多站1人,规定第一行,最后一行,第一列,最后一列必须站有队员。一共多少种方法。
这个题首先感觉是分类讨论,但是在计数的时候还是有些困难。那么从对立面开始思考呢?假如要求是第一行、列,最后一行、列不占人的话,那不就是很简单的C(x,y)的组合数问题了。
现在我们第一行不站拉拉队员的状态为A。最后一行不站拉拉队员的状态为B。第一列不站拉拉队员状态为C。最后一列不站拉拉队员的站立状态为D。
总情况为sum=C(m*n,k),根据容斥原理
那么我要的结果ans=sum-[(A+B+C+D)-(AB+AC+AD+AC+BC+BD+CD)+(ABC+ABD+BCD)-(ABCD)]
下面这个容斥原理怎样实现呢?用二进制表示ABCD 4个状态是否取到,sum->0,A->1,B->2,C->4,D->8,AC->3,ABCD->15。这样分成了16种状态
#include <bits/stdc++.h> using namespace std;
#define M 505
const int mod =;
long long int c[M][M];
void init()//用递推公式来写组合数
{
memset(c,,sizeof c);
c[][]=;
for(int i=;i<M;++i)
{
c[i][]=c[i][i]=;
for (int j=;j<i;++j)
c[i][j]=(c[i-][j-]+c[i-][j])%mod;//注意取模
}
}
int main()
{
init();
int t;
scanf("%d",&t);
int casee=;
while (t--)
{
int n,m,k;
long long int sum=;
scanf("%d%d%d",&n,&m,&k);
for (int s=;s<;++s)
{
int r=n,c1=m,bin=;//bin来表示二进制状态
if (s&){r--;bin++;}
if (s&){r--;bin++;}
if (s&){c1--;bin++;}
if (s&){c1--;bin++;}
if (bin&)//激活状态为奇数
sum=(sum+mod-c[r*c1][k])%mod;//减法取模这样写
else
sum=(sum+c[r*c1][k])%mod;
}
printf("Case %d: ",++casee);
printf("%lld\n",sum);
}
return ;
}
UVa 11806 Cheerleaders (容斥原理+二进制表示状态)的更多相关文章
- UVA 11806 Cheerleaders (容斥原理)
题意 一个n*m的区域内,放k个啦啦队员,第一行,最后一行,第一列,最后一列一定要放,一共有多少种方法. 思路 设A1表示第一行放,A2表示最后一行放,A3表示第一列放,A4表示最后一列放,则要求|A ...
- UVA.11806 Cheerleaders (组合数学 容斥原理 二进制枚举)
UVA.11806 Cheerleaders (组合数学 容斥原理 二进制枚举) 题意分析 给出n*m的矩形格子,给出k个点,每个格子里面可以放一个点.现在要求格子的最外围一圈的每行每列,至少要放一个 ...
- uva 11806 Cheerleaders
// uva 11806 Cheerleaders // // 题目大意: // // 给你n * m的矩形格子,要求放k个相同的石子,使得矩形的第一行 // 第一列,最后一行,最后一列都必须有石子. ...
- UVA - 11806 Cheerleaders (容斥原理)
题意:在N*M个方格中放K个点,要求第一行,第一列,最后一行,最后一列必须放,问有多少种方法. 分析: 1.集合A,B,C,D分别代表第一行,第一列,最后一行,最后一列放. 则这四行必须放=随便放C[ ...
- UVA 11806 Cheerleaders (组合+容斥原理)
自己写的代码: #include <iostream> #include <stdio.h> #include <string.h> /* 题意:相当于在一个m*n ...
- UVA 11806 Cheerleaders (容斥原理
1.题意描述 本题大致意思是讲:给定一个广场,把它分为M行N列的正方形小框.现在给定有K个拉拉队员,每一个拉拉队员需要站在小框内进行表演.但是表演过程中有如下要求: (1)每一个小框只能站立一个拉拉队 ...
- UVa 11806 Cheerleaders (数论容斥原理)
题意:给定一个n*m的棋盘,要放k个石子,要求第一行,最后一行,第一列,最后一列都有石子,问有多少种放法. 析:容斥原理,集合A是第一行没有石子,集合B是最后一行没有石子,集合C是第一列没有石子,集合 ...
- 【递推】【组合数】【容斥原理】UVA - 11806 - Cheerleaders
http://www.cnblogs.com/khbcsu/p/4245943.html 本题如果直接枚举的话难度很大并且会无从下手.那么我们是否可以采取逆向思考的方法来解决问题呢?我们可以用总的情况 ...
- UVa 11806 - Cheerleaders (组合计数+容斥原理)
<训练指南>p.108 #include <cstdio> #include <cstring> #include <cstdlib> using na ...
随机推荐
- nIce 不看会后悔的o!
今天小编来跟大家探讨关于“控件”.控件非常好玩,可以构建出不同的场景和不同风格的Windows画面.相信大家绝对狠感兴趣是吧~~~ 好了,下面小编就为大家来展示风采喽 下面先为大家展示一些比较基础 ...
- 本地项目关联到远程git仓库
本地项目关联到远程git仓库 场景是这样的:在gitee-code上新建一个项目,gitee会帮你把项目初始化,初始化之后会根据你的选择生成默认的说明文件和gitignore文件.这个时候你就可以复制 ...
- (转)Docker 网络
转:https://www.cnblogs.com/allcloud/p/7150564.html 本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker ...
- Gitblit用户没有push权限,但是已经在team里面配置了
问题: 用户已经移动到team里面,team有对应repository的push权限. does not have push permissions for 解决方案: 发现这个用户以前单独配置了这个 ...
- Castle动态代理拦截
比如现在有一个方法,进行积分奖励 PointAdd 在不改变原来方法的基础上,增加积分奖励的日志 using Castle.DynamicProxy; public class AuditTraceI ...
- javascript获取网页宽高,屏幕宽高,屏幕分辨率等
<script> var s = ""; s += "\r\n网页可见区域宽:"+ document.body.clientWidth; s + ...
- Appium移动端自动化:元素定位uiautomatorviewer
一.启动uiautomatorviewer mac: 1.打开终端,进入Android/sdk/tools目录 2.打开uiautomatorviewer(我的路径是Android/sdk/tools ...
- c# .netframwork 4.0 调用 2.0时报错 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。
“System.IO.FileLoadException”类型的未经处理的异常在 XXX.dll 中发生 其他信息: 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的 ...
- UVA 10256 The Great Divide(凸包划分)
The Great Divide Input: standard input Output: standard output Time Limit: 8 seconds Memory Limit: 3 ...
- HDU 6469 /// 二分
题目大意: 分裂怪有1到n种等级, 第1级的分裂怪称为原子怪,它不会分裂,被击杀时会产生a[1]点经验: 而第k级的分裂怪死亡时则会分裂成a[k]个第k - 1级的分裂怪. 一个体力可以杀死一个怪物. ...