题目描述

Hja特别有钱,他买了一个×的棋盘,然后Yjq到这个棋盘来搞事。一开始所有格子都是白的,Yjq进行次行操作次列操作,所谓一次操作,是将对应的行列上的所有格子颜色取反。现在Yjq希望搞事之后棋盘上有个黑色格子,问Yjq 有多少种搞事的方法。

数据范围

1≤,,,≤100000,0≤≤×M

 题解:
     ①先不考虑冗余操作(冗余操作定义:对同一个地方进行2次及以上操作)

     ②设对行进行x操作,对列进行y次操作,那么得到等式:

mx+ny-2xy=S ----->枚举x,则y=(S-mx)/(n-2x)

     ③那么行上剩余(R-x)次操作,列上剩余(C-y)次操作。

     ④为了使这些不影响答案,那么必须偶数地添加到任意位置,可以添加的次数为:

                  Timesx=(R-x)/2   Timesy=(C-y)/2

     ⑤剩下的就是组合数问题了,问题转化为:将m个小球放入n个盒子里,盒子可以多放,可以不放。

     ⑥此类组合数问题解法:先讲小球扩大为(n+m)个,那么问题转化为每个盒子至少放一个小球的方案数——转化为将(n+m)个数分成非空的n组的问题(插隔板问题)。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm> using namespace std; #ifdef unix
#define LL "%lld"
#else
#define LL "%I64d"
#endif const int maxn=100010;
const int mo=1000000007; int n,m,r,c,ans,v0[maxn],v1[maxn],v2[maxn],v3[maxn],v4[maxn]; long long s; int multi(long long a,int b)
{
a*=b;
if (a>=mo) a%=mo;
return (int)a;
} void inc(int &a,int b)
{
a+=b;
if (a>=mo) a-=mo;
} int mul(int a,int b)
{
int ans=1;
while (b)
{
if (b&1) ans=multi(ans,a);
a=multi(a,a);
b>>=1;
}
return ans;
} int main()
{
//freopen("c.in","r",stdin);
//freopen("c.out","w",stdout); scanf("%d%d%d%d" LL,&n,&m,&r,&c,&s);
v1[0]=1;
for (int a=1;a<=100000;a++)
v0[a]=mul(a,mo-2);
int tmp=1;
for (int a=0;a<=(r>>1);a++)
{
v1[a]=tmp;
tmp=multi(tmp,multi(a+n,v0[a+1]));
}
tmp=1;
for (int a=0;a<=(c>>1);a++)
{
v2[a]=tmp;
tmp=multi(tmp,multi(a+m,v0[a+1]));
}
tmp=1;
for (int a=0;a<=n;a++)
{
v3[a]=tmp;
tmp=multi(tmp,multi(n-a,v0[a+1]));
}
tmp=1;
for (int a=0;a<=m;a++)
{
v4[a]=tmp;
tmp=multi(tmp,multi(m-a,v0[a+1]));
}
for (int a=r&1;a<=min(n,r);a+=2)
if (a*2!=n)
{
if (((s-(long long)a*m))%(n-a*2)) continue;
int b=(int)((s-(long long)a*m)/(n-a*2));
if (b>c || b<0 || ((c-b)&1)) continue;
int nowans=v3[a];
nowans=multi(nowans,v1[(r-a)>>1]);
nowans=multi(nowans,v4[b]);
nowans=multi(nowans,v2[(c-b)>>1]);
inc(ans,nowans);
}
else
{
if ((long long)a*m!=s) continue;
int nowans=v3[a];
nowans=multi(nowans,v1[(r-a)>>1]);
int cnt=0;
for (int b=(c&1);b<=min(r,c);b+=2)
inc(cnt,multi(v4[b],v2[(c-b)>>1]));
inc(ans,multi(ans,cnt));
}
printf("%d\n",ans); return 0;
}//czy020202(代码有点丑)

别害怕我就站在你身边,心在一起爱会让我们勇敢。

别害怕我就站在你身边,看黑夜无法吞没黎明的天。——————汪峰《直到永远》

【CZY选讲·Hja的棋盘】的更多相关文章

  1. 【CZY选讲·棋盘迷宫】

    题目描述 一个N*M的棋盘,’.’表示可以通过,’#’表示不能通过,给出Q个询问,给定起点和终点,判断两点是否联通,如联通输出“Yes”,否则输出“No”. 数据范围 N,M <=500,Q ...

  2. 【CZY选讲·Yjq的棺材】

    题目描述 Yjq想要将一个长为宽为的矩形棺材(棺材表面绝对光滑,所以棺材可以任意的滑动)拖过一个L型墓道. 如图所示,L型墓道两个走廊的宽度分别是和,呈90°,并且走廊的长度远大于. 现在Hja ...

  3. 【CZY选讲·吃东西】

    题目描述 一个神秘的村庄里有4家美食店.这四家店分别有A,B,C,D种不同的美食.LYK想在每一家店都吃其中一种美食.每种美食需要吃的时间可能是不一样的.现在给定第1家店A种不同的美食所需要吃的时间 ...

  4. 【CZY选讲·一道图论神题】

    题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只有点权. LYK想把这个图删干净,它的方法是这样的.每次选择一个点,将它删掉,但删这个点是需要代价的 ...

  5. 【CZY选讲·最大子矩阵和】

    题目描述 有一个n*m的矩阵,恰好改变其中一个数变成给定的常数P,使得改变后的这个矩阵的最大子矩阵最大. 数据范围 n,m<=300. 题解:    ①如果没有p,那么二维矩阵和就是一维最长 ...

  6. 【CZY选讲·逆序对】

    题目描述 LYK最近在研究逆序对. 这个问题是这样的. 一开始LYK有一个2^n长度的数组ai. LYK有Q次操作,每次操作都有一个参数k.表示每连续2^k长度作为一个小组.假设 n=4,k= ...

  7. 【CZY选讲·Triangle】

    题目描述 长度为的铁丝,你可以将其分成若干段,并把每段都折成一个三角形.你还需要保证三角形的边长都是正整数并且三角形两两相似,问有多少种不同的分法. 数据范围 1≤≤10^6 题解:      ①相 ...

  8. 【CZY选讲·扩展LCS】

    题目描述 给出两个仅有小写字母组成的字符串str1 和str2,试求出两个串的最长公共子序列. 数据范围 |str1| ⩽ 1000; |str2| ⩽ 10^6 题解:    ①直接进行LCS( ...

  9. 【CZY选讲·次大公因数】

    题目描述 给定n个数ai,求sgcd(a1,a1),sgcd(a1,a2),…,sgcd(a1,an). 其中sgcd(x,y)表示x和y的次大公因数.若不存在次大公因数,sgcd(x,y)=-1 ...

随机推荐

  1. 【软件笔记】 ◆笔记·I◆ 各类冷门函数细解

    [软件笔记·I] 各类冷门函数细解 ■题外话■ 总觉得作为一个志向远大的 coder (٩(◕‿◕。)۶),我觉得单单只会做题是不够的所以我开始尝试自己编写软件!初入道的我并不知道C++其实并不太适合 ...

  2. 关于Pycharm基本操作笔记

    创建 project(工程,译音:破拽科特) 1.Create New project(创建一个新的工程,译音:科瑞特 纽 破摘科特) 2.pure python(纯派森,译音:皮忧儿 派森) 3.l ...

  3. 36-应用Jwtbearer Authentication

    新建.net core webapi项目 E:\coding\netcore>dotnet new webapi --name JwtAuthSample 创建需要用到的实体对象类 namesp ...

  4. TouTiao开源项目 分析笔记17 新闻媒体专栏

    1.效果预览 1.1.要实现的效果 1.2.如何调转到新闻媒体专栏 点击右上角的用户图标. 在新闻详情页面的Fragment的菜单点击事件中触发. case R.id.action_open_medi ...

  5. TouTiao开源项目 分析笔记7 加载数据的过程

    1.以新闻页中的段子数据显示为例 1.1.首先执行InitApp==>SplashActivity. 因为在AndroidManifest.xml中定义了一个<intent-filter& ...

  6. Android 意图通用类 IntentUrl

    1.整体分析 1.1.源代码如下,可以直接Copy. public class IntentUtil { /** * 打开链接 * 根据设置判断是用那种方式打开 * * @param context ...

  7. MyBatis---集合查询(一对多)

    这里的集合查询即一对多的数据联合查询.如一个用户多次登录的信息查询 要实现这样的联合查询需要在用户实体类中添加登录实体类的一个集合属性字段,表中不存在该字段. <resultMap id=&qu ...

  8. P2183 巧克力(二分答案)

    P2183 巧克力 题目描述 佳佳邀请了M个同学到家里玩.为了招待客人,她需要将巧克力分给她的好朋友们.她有N(1<=N<=5000)块巧克力,但是大小各不一样,第i块巧克力大小为为1*X ...

  9. chrome 切换到其他网络后重新加载网

    chrome 突然提示 “您与 www.google.com 之间的安全连接目前正受到干扰.  请等待几分钟后再尝试重新加载网页,或在切换到其他网络后重新加载网” 查看证书发现 已经过期 解决:同步下 ...

  10. 不想停机?快使用Windows Server 2016滚动升级

    [TechTarget中国原创] Windows Server环境中的关键任务工作量总是密集的.工作量会主要集中在Hyper-V部署集群.硬件故障转移集群或者外来集群的顶部.集群中常用的表格都是基于F ...