题意

一个n*m的区域内,放k个啦啦队员,第一行,最后一行,第一列,最后一列一定要放,一共有多少种方法。

思路

设A1表示第一行放,A2表示最后一行放,A3表示第一列放,A4表示最后一列放,则要求|A1∧A2∧A3∧A4|
由容斥原理可知|∪Ai| = Σ|Ai| - Σ|Ai∧Aj| + …… (+-)|Ai∧Aj∧……∧Ak|.
再由德摩根定律得:∧Ai = Cu(∪Cu(Ai)),所以|∧Ai| = S - |∪Cu(Ai)|.(Cu表示集合的非)
然后令A表示不放第一行,B表示不放最后一行,C表示不放第一列,D表示不放最后一列。
ANS = ALL-A-B-C-D+AB+AC+AD+BC+BD-ABC-ABD-BCD+ABCD

代码


#include
#include
#include
#include
#include
#include
#define MID(x,y) ((x+y)/2)
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;const int MAXNUM = 505;
int C[MAXNUM][MAXNUM];
void cal_C(int n, int mod){mem(C, 0);C[0][0] = 1;for (int i = 1; i <= n; i ++){C[i][0] = 1;for (int j = 1; j <= i; j ++){C[i][j] = (C[i-1][j-1] + C[i-1][j]) % mod;}}
}int main(){//freopen("test.in", "r", stdin);//freopen("test.out", "w", stdout);cal_C(500, 1000007);int t;scanf("%d", &t);for (int icase = 1; icase <= t; icase++){int n, m, k;scanf("%d %d %d", &n, &m, &k);int ans = 0;for (int i = 0; i < 16; i ++){int bit = 0;int r = n, c = m;if (i & 1)  r --, bit ++;if (i & 2)  r --, bit ++;if (i & 4)  c --, bit ++;if (i & 8)  c --, bit ++;if (bit & 1){ans = (ans - C[r*c][k] + 1000007) % 1000007;}else{ans = (ans + C[r*c][k]) % 1000007;}}printf("Case %d: %d\n", icase, ans);}return 0;
}

转载于:https://www.cnblogs.com/AbandonZHANG/p/4114281.html

UVA 11806 Cheerleaders (容斥原理)相关推荐

  1. UVA - 11806 Cheerleaders(组合数学+容斥原理)

    题目链接:点击查看 题目大意:给出一个n*m的矩阵,现在有k个拉拉队员,要求在第一列.最后一列.第一行和最后一行至少有一个拉拉队员,注意以下要求: 四个角上的拉拉队员可以同时属于两条边 每个方格至多只 ...

  2. UVa 11806 Cheerleaders

    题意:m行n列的矩形网格放k个相同的石子,要求第一行最后一行第一列最后一列都必须有石子,问有多少种放法 A为第一行没有石子的方案数,BCD依此类推,全集为S 如果没有任何要求的话,放法数应该是C(rc ...

  3. 【转载】容斥原理的证明及应用

    翻译:vici@cust 对容斥原理的描述 容斥原理是一种重要的组合数学方法,可以让你求解任意大小的集合,或者计算复合事件的概率. 描述 容斥原理可以描述如下: 要计算几个集合并集的大小,我们要先将所 ...

  4. 数学--数论--容斥定理完全解析(转)

    对容斥原理的描述 容斥原理是一种重要的组合数学方法,可以让你求解任意大小的集合,或者计算复合事件的概率. 描述 容斥原理可以描述如下: 要计算几个集合并集的大小,我们要先将所有单个集合的大小计算出来, ...

  5. UVa 1393 (容斥原理、GCD) Highways

    题意: 给出一个n行m列的点阵,求共有多少条非水平非竖直线至少经过其中两点. 分析: 首先说紫书上的思路,编程较简单且容易理解.由于对称性,所以只统计"\"这种线型的,最后乘2即是 ...

  6. Cheerleaders【容斥】

    Cheerleaders UVA - 11806 题目传送门 题目大意:给你三个整数n,m,k,代表有一个n行m列的场地,共有k个人,需保证在最外围的一圈的每行每列都必须要有一个人,若这个人在对角上, ...

  7. 信息学竞赛中的数学知识 --- 容斥原理

    C++基础数论-----容斥原理 C++基础数论-----容斥原理_C2020lax的博客-CSDN博客_容斥原理c++ C++数论容斥原理----无关的元素 C++数论容斥原理----无关的元素 - ...

  8. 《算法入门经典大赛——培训指南》第二章考试

    UVa特别考试 UVa站点专门为本书设立的分类题库配合,方便读者提交: http://uva.onlinejudge.org/index.php?option=com_onlinejudge& ...

  9. [kuangbin]各种各样的题单

    [kuangbin]各种各样的题单 专题1 简单搜索 POJ 1321 POJ 2251 POJ 3278 POJ 3279 POJ 1426 POJ 3126 POJ 3087 POJ 3414 F ...

最新文章

  1. Android 布局文件Graphical Layout不显示预览+不能实现拖置功能
  2. Win8 Metro(C#)数字图像处理--2.69中点滤波器
  3. python ui自动化配置文件,Python+Selenium进行UI自动化测试项目中,常用的小技巧2:读取配置文件(configparser,.ini文件)...
  4. 2.3.3 spring属性注入-注解注入-全注解-配置类扫描
  5. asp.net 发送邮件
  6. np.random.randint产生一个范围内的数据
  7. Node.js npm 详解
  8. C# Regex 深入正则表达式
  9. 线性回归和广义线性回归
  10. 华理c语言设计网上作业,华理c程序实验报告(共9篇).doc
  11. caffemodel中的参数及特征的抽取
  12. atitit.TokenService v3 qb1 token服务模块的设计 新特性.docx
  13. boost升压电路 开环 PI 单闭环 双闭环 数学模型 PWM matlab仿真
  14. ZigBee串口发送字符串函数
  15. 虚拟服务器欠费是什么原因,辟谣:Elysium解释近期服务器崩溃的原因 非服务器欠费 而是闪电...
  16. python 保存数据为excel
  17. 暗影精灵5风扇怎么调_惠普HP暗影精灵5 Super游戏主机改装猫头鹰风扇攻略
  18. 用vue写一个天气webAPP
  19. Redis占用内存过高怎么办
  20. ubuntu16.4离线安装显卡驱动

热门文章

  1. [原]Oracle外部表结合游标完成统计一例
  2. Software Project Management之EVM问题的求解
  3. MySQL---分组查询
  4. Linux---僵尸进程的解决办法
  5. 句句真研—每日长难句打卡Day5
  6. HTML+CSS制作七夕跳动的红心动画效果
  7. linux服务器上svn的log_SVN如何查看修改的文件记录
  8. 比特币矿池是什么意思
  9. 解除劳动关系后,职工医保怎么续缴?
  10. 二婚不领证吃亏的是谁?