[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 的管辖, ...
随机推荐
- mybatis中参数为list集合时使用 mybatis in查询
mybatis中参数为list集合时使用 mybatis in查询 一.问题描述mybatis sql查询时,若遇到多个条件匹配一个字段,sql 如: select * from user where ...
- SpringDataRedis
一.简介 1.SpringData和Redis Redis将数据存储到内存的,速度快.可以解决请求mysql数据库过多而导致mysql崩溃的问题. SpringData是专门用来控制Redis的工具, ...
- pip笔记(译)
从PyPI中安装包 >>> pip install SomePackage [...] Successfully installed SomePackage 从PyPI或其他地方安装 ...
- Github强制找回管理员账号密码
步骤: 1. 登录Github所在的服务器,切换用户为git:su git 2. 进入Github的Rails控制台:gitlab-rails console production 3. 查看超级管理 ...
- java读取配置文件属性
在项目开发过程中,有时需要将其中用到的变量值在一个文件中统一管理,首先我选到了config.properties文件:下面这个代码是用于读取其中的变量值的类: package com.modem.te ...
- Redis:Linux安装与使用
Redis的存储结构:字符类型,散列类型,列表类型,集合类型,有序集合. Redis功能: 可以为每个key设置超时时间. 可以通过列表类型来实现分布式队列的操作. 支持发布订阅的消息模式. 为什么使 ...
- android studio中为gradle指定cmake版本
Android Studio相当于是Intellij基础上写了一个AS插件,这个插件使用gradle作为构建系统,因此构建出现问题先考虑gradle的文档. gradle可以使用native buil ...
- php导出数据到csv
序言 php导出数据到csv是一种很常见的功能,且csv相比于excel文件有其一定的优势,首先csv对数据的行数没有限制,但是excel对数据的行数有一定的限制,因此,csv文件对于导出大量的数据来 ...
- Yii2 路由美化
一.美化路由形式 如:localhost/index.php?r=site/index 这种路由形式对SEO不友好,那么是否可以对路由进行一下美化呢?在Yii2中我们可以将路由必成以下的形式: 如:l ...
- Python3和Python2 异常处理except的不同
最近准备做个微信公众号的项目,但是微信平台的开发者文档介绍的是web.py,虽然有支持python3的版本.但是在介绍页面的还是python2的代码. python2.x的时候: try: raise ...