[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 的管辖, ...
随机推荐
- dp的平行四边形优化
证明过程转载自charliezhi2007的博客 题目链接 备用链接 分析:一道区间dp,状态转移方程\(dp[i][j]=min(dp[i][j],dp[i][s]+dp[s+1][j]+sum[j ...
- 【面试突击】-Redis常见面试题(一)
介绍:Redis 是一个开源的使用 ANSI C 语言编写.遵守 BSD 协议.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的 API的非关系型数据库. 传统数据 ...
- k8s维护常用命令
k8s维护 1. 不可调度 kubectl cordon k8s-node-1 kubectl uncordon k8s-node-1 #取消 2.驱逐已经运行的业务容器 kubectl drain ...
- Hybris服务器启动日志分析
build文件检测,使用b2c_acc recipit启动服务器:/home/jerrywang/Hybris/installer/recipes/b2c_acc/build.gradle The T ...
- linux技能点 二
三. 文件操作:新增,删除,修改,查找,文件属性,文件内容查看,文件辅助命令,打包(解压缩),文件名注意事项. 新增:单文件,目录 ...
- python测量函数运行时间长度
python测试函数运行时间长度的方法如下 import time def measure_time(): def wraps(func): def mesure(*args,**kwargs): s ...
- C# 认识 接口
一.什么是接口 C#接口中包含方法.属性.索引器和事件的声明,但常用的接口中一般就是方法和属性,然而接口中并没有方法的具体实现代码(不能提供任何成员实现),只有方法的返回类型和方法名.一个类实现了某个 ...
- xml和json的判断格式是否相等
手动撸了个 xml 和 json 格式匹配的代码. /** * 判断数据的结构.遍历节点然后去对应的json那边查找是否存在这样的节点 * * @param root 配置的xml所对应的对Eleme ...
- 图记 2016.1.7 获取本地图片、Bitmap转image
这几天完成的内容有: 1.“添加图片”按钮 2.添加图片功能 遇到的问题: 我想要将添加图片按钮放在右下角,所以采用了相对布局,但是问题随之二来,因为将导航栏设置成了半透明,所以图片放到右下角之后,半 ...
- Linux 用户账号与权限管理
在Linux中,如何管理用户.管理权限?请看下文,谢谢配合. 用户.组概述 用户分类 超级用户:root,人为交互最高权限用户,system为最高权限用户. 普通用户:通过管理管理员创建,权限受到一定 ...
