[JLOI 2015]骗我呢
传送门
Description
求给\(n*m\)的矩阵填数的方案数
满足:
\[1\leq x_{i,j}\leq m
\]\[x_{i,j}<x_{i,j+1}
\]\[x_{i,j}<x_{i-1,j+1}
\]
Solution
\(f[i][j]\)表示当前第\(i\)行少的数字是\(j\)的方案数
\[f[i][j]=\sum_{k=1}^{j+1}f[i-1][k]=f[i][j-1]+f[i-1][j+1]
\]观察dp的转移方程
发现它和路径计数的过程很类似
通过等价变化,答案即为:
从\((0,0)\)到\((n+m+1,n)\)且不经过直线,\(A:y=x+1\),\(B:y=x-(m+2)\)的方案数
走的方式为只能沿坐标轴的正方向
假如说如果没有限制条件,从\((0,0)\) 到\((x,y)\) 的方案数是\(\binom{x+y}{x}\)
接下来,我们考虑如何进行容斥:
考虑一种关于自身长度奇偶性的容斥
简化一下不合法的经过的路线,有两种情况:\(ABABAB...\)和\(BABABA...\)
这里,如若连着触碰一个条线,我们把它当作是一次
设终点为\((x,y)\),它关于\(A\)的对称点是\((x_1,y_1)\)
那么从\((0,0)\)到\((x_1,y_1)\)的路径可以对应一条必然经过了一次\(A\)线的路径,所以它的结尾肯定是\(AB\)或\(A\)
将其减去
设\((x_1,y_1)\)关于\(B\)的对称点是\((x2_y2)\)
那么从\((0,0)\)到\((x2,y2)\)的路径可以对应一条必然经过了一次\(BA\)的路径,所以它的结尾肯定是\(BA\)或\(BAB\)
将其加回
......
如此往复,直到不存在所要求的路径的后缀
可以发现,这样一来,恰好所有以\(A\)开头的都被计算了奇数次,也就是被减了一次
以\(B\)开头的不合法路径相似计算即可
Code
//f[i][j]表示当前第i行少的数字是j的方案数
//f[i][j]=\sum_{k=1}^{j+1}f[i-1][k]=f[i][j-1]+f[i-1][j+1]
//把改问题转换为路径问题,用组合数加容斥来做
#include<bits/stdc++.h>
#define reg register
#define ll long long
#define db double
using namespace std;
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
const int MN=1e6+5,P=1e9+7;
int n,m,M;
int fac[MN<<2],inv[MN<<2];
int Mul(int x,int y){return (1ll*x*y)%P;}
int Add(int x,int y){y=((y%P)+P)%P;return (x+y)%P;}
int X,Y,_,ans;
int C(int x=M,int y=Y)
{
if(x<0||y<0||y>x)return 0;
return Mul(Mul(fac[x],inv[y]),inv[x-y]);
}
void _1(){X=Y-1;Y=_+1;_=X;}
void _2(){X=Y+(m+2);Y=_-(m+2);_=X;}
int main()
{
n=read();m=read();M=2*n+m+1;
_=X=n+m+1;Y=n;
fac[0]=fac[1]=inv[0]=inv[1]=1;
register int i,tmp;
for(i=2;i<=M;++i) fac[i]=Mul(fac[i-1],i);
for(i=2;i<=M;++i) inv[i]=Mul(inv[P%i],(P-P/i));
for(i=2;i<=M;++i) inv[i]=Mul(inv[i-1],inv[i]);
ans=C();
for(i=1;;++i)
{
if(i&1) _1();else _2();if(X<0||Y<0) break;
ans=Add(ans,(-1)*(i&1?1:-1)*C());
}
_=X=n+m+1;Y=n;
for(i=1;;++i)
{
if(i&1) _2();else _1();if(X<0||Y<0) break;
ans=Add(ans,(-1)*(i&1?1:-1)*C());
}
return 0*printf("%d\n",ans);
}
Blog来自PaperCloud,未经允许,请勿转载,TKS!
[JLOI 2015]骗我呢的更多相关文章
- BZOJ 4005 [JLOI 2015] 骗我呢
首先,我们可以得到:每一行的数都是互不相同的,所以每一行都会有且仅有一个在 $[0, m]$ 的数没有出现. 我们可以考虑设 $Dp[i][j]$ 为处理完倒数 $i$ 行,倒数第 $i$ 行缺的数字 ...
- [JLOI2015]骗我呢
[JLOI2015]骗我呢 Tags:题解 作业部落 评论地址 TAG:数学,DP 题意 骗你呢 求满足以下条件的\(n*m\)的矩阵的个数对\(10^9+7\)取模 对于矩阵中的第\(i\)行第\( ...
- 【BZOJ4005】[JLOI2015] 骗我呢(容斥,组合计数)
[BZOJ4005][JLOI2015] 骗我呢(容斥,组合计数) 题面 BZOJ 洛谷 题解 lalaxu #include<iostream> using namespace std; ...
- 「JLOI2015」骗我呢 解题报告?
「JLOI2015」骗我呢 这什么神仙题 \[\color{purple}{Link}\] 可以学到的东西 对越过直线的东西翻折进行容斥 之类的..吧? Code: #include <cstd ...
- 【BZOJ4005】[JLOI2015]骗我呢
题意: Alice和Bob在经过了数学的洗礼之后,不再喜欢玩对抗游戏了,他们喜欢玩合作游戏.现在他们有一个n×m的网格,Alice和Bob要在一定规则下往网 格里填数字,Alice和Bob都是聪明绝顶 ...
- BZOJ 4004 [JLOI 2015] 装备购买 解题报告
哎这个题 WA 了无数遍...果然人太弱... 首先我们把这些装备按照花费从小到大排序,然后依次考虑是否能买这个装备. 至于这样为什么是对的,好像有一个叫拟阵的东西可以证明,然而我不会.TATQAQ ...
- bzoj4005[JLOI2015]骗我呢
http://www.lydsy.com/JudgeOnline/problem.php?id=4005 神题~远距离orz 膜拜PoPoQQQ大神 #include<cstdio> #i ...
- [JLOI 2015]装备购买
Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 (1 <= i <= n; 1 < ...
- [JLOI 2015]城池攻占
Description 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池. 这 n 个城池用 1 到 n 的整数表示.除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖, ...
随机推荐
- rename file
https://askubuntu.com/questions/790633/the-o-parameter-in-aria2c-cant-rename-the-downloaded-file You ...
- 启动OpenOffice服务
下载安装 安装OpenOffice 4.1.6:下载路径:http://www.openoffice.org/zh-cn/download/ 启动 用以下命令启动OpenOffice服务,注意ip,如 ...
- 报错The "chunk" argument must be one of type string or Buffer. Received type object
报错内容: TypeError [ERR_INVALID_ARG_TYPE]: The "chunk" argument must be one of type string or ...
- Spring框架的核心概念是什么?需要掌握的知识点都有哪些?
Spring其主要精髓 就是IOC和AOP.掌握好了这两点对于理解Spring的思想颇有意义. IOC(英文 Inversion of Control)就是控制反转的意思.就是把新建对象(new Ob ...
- 关于Python学习之 列表与字典
列表 列表是Python中最具灵活性的有序集合对象类型. # 列表迭代和解析 >>> res = [c*4 for c in 'Spam'] >>> res ['S ...
- mybatis添加sql打印功能
添加配置文件: mybatis-config.xml <?xml version="1.0" encoding="UTF-8"?> <!DOC ...
- MYSQL慢查询优化方法及优化原则
1.日期大小的比较,传到xml中的日期格式要符合'yyyy-MM-dd',这样才能走索引,如:'yyyy'改为'yyyy-MM-dd','yyyy-MM'改为'yyyy-MM-dd'[这样MYSQL会 ...
- Pthon魔术方法(Magic Methods)-容器相关方法
Pthon魔术方法(Magic Methods)-容器相关方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.容器相关方法汇总 __len__: 内建函数len(),返回对象的 ...
- javascript数据结构与算法——栈
前言: 栈就是和列表类似的一种数据结构,不过栈的特点是'后人先出'.栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样操作很快,而且容易实现. 1. 栈的介绍: 栈是一种特殊的列表,栈内的 ...
- Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)-D. Restore Permutation-构造+树状数组
Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)-D. Restore Permutation-构造+树状数组 [Pro ...