Description

有一个N*M的棋盘,初始每个格子都是白色的。
行操作是指选定某一行,将这行所有格子的颜色取反(黑白互换)。
列操作是指选定某一列,将这列所有格子的颜色取反。
XX进行了R次行操作C次列操作(可能对某行或者某列操作了多次),最后棋盘上有S个黑色格子。
问有多少种不同的操作方案。两种操作方案不同,当且仅当对某行或者某列操作次数不同(也就是说与操作的顺序无关)。
方案数可能很大,输出它对10^9+7取模的结果。

Input

输入只有5个整数N,M,R,C,S。
N,M,R,C≤100000,0≤S≤N*M。

Output

输出有且仅有一个整数,表示答案对10^9+7取模的结果。
对行和列分别考虑,若有a行操作奇数次,b列操作奇数次,则有am+bn-ab个格子为黑色,可以枚举a求出对应的b,这时问题转化为n个物品分成k段,有x段含奇数个物品的方案数,打表可知当n-x为奇数时方案数为0,否则方案数为C(k-1+(n-x)/2,k-1)*C(k,x)
#include<cstdio>
typedef long long i64;
const int P=;
int n,m,a,b;
i64 s,ans=;
int iv[],fiv[],fac[];
i64 C(int n,int m){
if(n<m)return ;
return i64(fac[n])*fiv[m]%P*fiv[n-m]%P;
}
i64 F(int n,int k,int x){
if(n-x&)return ;
return C(k,x)*C(k-+(n-x>>),k-)%P;
}
int main(){
scanf("%d%d%d%d%lld",&n,&m,&a,&b,&s);
iv[]=;
int mx=(n>m?n:m)*+;
for(int i=;i<=mx;++i)iv[i]=i64(-P/i)*iv[P%i]%P;
fac[]=fiv[]=;
for(int i=;i<=mx;++i){
fac[i]=i64(i)*fac[i-]%P;
fiv[i]=i64(iv[i])*fiv[i-]%P;
}
for(int i=,z=n;i<=n;++i,z-=){
i64 j=(s-i64(i)*m);
if(z&&j%z==){
j/=z;
if(j>=&&j<=m)ans=(ans+F(a,n,i)*F(b,m,j))%P;
}
}
if(n%==&&s*==n*i64(m)){
int i=n/;
i64 v=;
for(int j=;j<=m;++j)v+=F(b,m,j);
ans=(ans+v%P*F(a,n,i))%P;
}
printf("%lld",(ans+P)%P);
return ;
}

bzoj4705: 棋盘游戏的更多相关文章

  1. [NOI2013模拟] BZOJ4705 棋盘游戏 解题报告(组合计数)

    莫名打不开这道题的链接,请读者自行搜索 Description 有一个N*M的棋盘,初始每个格子都是白色的.行操作是指选定某一行,将这行所有格子的颜色取反(黑白互换).列操作是指选定某一列,将这列所有 ...

  2. HD1281棋盘游戏(匹配+好题)

    棋盘游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  3. hdu------1281 棋盘游戏(最小覆盖点)

    棋盘游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  4. hdu 1281 棋盘游戏

    http://acm.hdu.edu.cn/showproblem.php?pid=1281 棋盘游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  5. 洛谷P1117 棋盘游戏

    洛谷1117 棋盘游戏 题目描述 在一个4*4的棋盘上有8个黑棋和8个白棋,当且仅当两个格子有公共边,这两个格子上的棋是相邻的.移动棋子的规则是交换相邻两个棋子.现在给出一个初始棋盘和一个最终棋盘,要 ...

  6. UESTC_棋盘游戏 CDOJ 578

    最近昀昀学习到了一种新的棋盘游戏,这是一个在一个N×N的格子棋盘上去搞M个棋子的游戏,游戏的规则有下列几条: 棋盘上有且仅有一个出口 开始时没有哪个棋子在出口,而且所有棋子都不相邻(这里的相邻是指上下 ...

  7. Loj #2731 「JOISC 2016 Day 1」棋盘游戏

    Loj 2731 「JOISC 2016 Day 1」棋盘游戏 JOI 君有一个棋盘,棋盘上有 \(N\) 行 \(3\) 列 的格子.JOI 君有若干棋子,并想用它们来玩一个游戏.初始状态棋盘上至少 ...

  8. Hdu1281 棋盘游戏

    棋盘游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  9. HDOJ 1281 棋盘游戏

    拆点二分图匹配 棋盘游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

随机推荐

  1. Core Java Volume I — 3.10. Arrays

    3.10. ArraysAn array is a data structure that stores a collection of values of the same type. You ac ...

  2. 跟开涛老师学shiro -- 授权

    授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等).在授权中需了解的几个关键对象:主体(Subject).资源(Resource).权限(Permission).角 ...

  3. (实用篇)php处理单文件、多文件上传代码分享

    php处理  单文件.多文件上传实例代码,供大家参考,具体内容如下 后台处理文件submit_form_process.php <?php /************************** ...

  4. (实用篇)微信网页授权(OAuth2.0) PHP 源码简单实现

    提要: 1. 建议对OAuth2.0协议做一个学习. 2. 微信官方文档和微信官网工具要得到充分利用. 比较简单,直接帖源代码了.其中"xxxxxxxxxx"部分,是需要依据自己环 ...

  5. iOS学习笔记---c语言第九天

    高级指针 指向结构体变量的指针,称为结构体指针 可以使用->指向内容. %p打印地址 void pLenth(cPoint *p1,cPoint *p2) //求两点间的距离  用的开方函数sq ...

  6. 第一篇TC界面设计

    TC界面设计方法 第一:确定自己最终界面的大小. 第二:根据功能需要,选择相应的控价. 第三:美化界面,对界面的控件调整布局位置,设置字体颜色设置背景图片等等 脚本代码: function 按钮1_点 ...

  7. 信頼済みサイト对window.open窗体大小影响原因之一

    如果某站点被添加进去之后,这个站点窗体限制被决定了,window.open里面,status bar 无效的设置不再起作用.而且,如果原来status bar被 任务栏挡住的话,这个时候它就会被显示出 ...

  8. CoderForces 280B(记忆化搜索)

    题目大意:一个纸牌游戏,52张纸牌排成一列,每张纸牌有面值和花色两种属性.每次操作可以用最后一张纸牌将倒数第二张或者倒数第四张替换,但前提是两张牌的花色或者面值相同.问最终能否只剩一张牌. 题目分析: ...

  9. [luogu P2170] 选学霸(并查集+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2170 题目描述 老师想从N名学生中选M人当学霸,但有K对人实力相当,如果实力相当的人中,一部分被选上,另一 ...

  10. backtrack下whatweb的使用

    whatweb是backtrack下的一款Web识别工具,位于 Applications-->BackTrack-->Information Gathing-->Web Applic ...