【题目描述】

小 D 特别喜欢玩游戏。这一天,他在玩一款填数游戏。

这个填数游戏的棋盘是一个n×mn×m的矩形表格。玩家需要在表格的每个格子中填入一个数字(数字 00 或者数字 11),填数时需要满足一些限制。

下面我们来具体描述这些限制。

为了方便描述,我们先给出一些定义:

*我们用每个格子的行列坐标来表示一个格子,即(行坐标,列坐标)。(注意:行列坐标均从 00 开始编号)

*合法路径 P:一条路径是合法的当且仅当:

1.这条路径从矩形表格的左上角的格子(0,0)(0,0)出发,到矩形的右下角格子(n−1,m−1)(n−1,m−1)结束;

2.在这条路径中,每次只能从当前的格子移动到右边与它相邻的格子,或者从当前格子移动到下面与它相邻的格子。

例如:在下面这个矩形中,只有两条路径是合法的,它们分别是p1p1:(0,0)→(0,1)→(1,1)(0,0)→(0,1)→(1,1)和p2p2:(0,0)→(1,0)→(1,1)(0,0)→(1,0)→(1,1)。

对于一条合法的路径 PP,我们可以用一个字符串w(P)w(P)来表示,该字符串的长度为n+m−2n+m−2,其中只包含字符“RR”或者字符“DD”,第 ii 个字符记录了路径 PP 中第 ii 步的移动方法,“RR”表示移动到当前格子右边与它相邻的格子,“DD”表示移动到当前格子下面与它相邻的格子。例如,上图中对于路径p1p1,有w(P1)="RD"w(P1)="RD";而对于另一条路径p2p2,有w(P2)w(P2) = "DR"。

同时,将每条合法路径 PP 经过的每个格子上填入的数字依次连接后,会得到一个长度为n+m−1n+m−1的 0101 字符串,记为 s(P)s(P)。例如,如果我们在格子(0,0)(0,0)和(1,0)(1,0)上填入数字00,在格子(0,1)(0,1)和(1,1)(1,1)上填入数字 11(见上图红色数字)。那么对于路径p1p1,我们可以得到s(P1)="011"s(P1)="011",对于路径p2p2,有s(P2)="001"s(P2)="001"。

游戏要求小 D 找到一种填数字 0、10、1 的方法,使得对于两条路径p1,P2p1,P2,如果w(P1)>w(P2)w(P1)>w(P2),那么必须s(P1)≤s(P2)s(P1)≤s(P2)。我们说字符串 aa 比字符串 bb 小,当且仅当字符串 aa 的字典序小于字符串bb 的字典序,字典序的定义详见第一题。但是仅仅是找一种方法无法满足小 D 的好奇心,小 D 更想知道这个游戏有多少种玩法,也就是说,有多少种填数字的方法满足游戏的要求?

小 D 能力有限,希望你帮助他解决这个问题,即有多少种填 0、10、1 的方法能满足题目要求。由于答案可能很大,你需要输出答案对109+7109+7取模的结果。

【输入】

输入共一行,包含两个正整数 n、mn、m,由一个空格分隔,表示矩形的大小。其中 nn 表示矩形表格的行数,mm 表示矩形表格的列数。

【输出】

输出共一行,包含一个正整数,表示有多少种填 0、10、1 的方法能满足游戏的要求。注意:输出答案对 109+7109+7 取模的结果。

【输入样例】

2 2

【输出样例】

12

【提示】

【样例解释】

样例输入2】

3 3

【样例输出2】

112

【样例输入3】

5 5

【样例输出3】

7136

【数据规模与约定】

测试点编号 n≤n≤ m≤
1∼41∼4 33 33
5∼105∼10 22 10000001000000
11∼1311∼13 33 10000001000000
14∼1614∼16 88 88
17∼2017∼20 88 1000000

代码如下:

#include<cstdio>

#include<cstring>

#include<algorithm>

#define P 1000000007 using namespace std;

int n,m,inv128=570312504,inv384=190104168;

int add(int x,int y) {return x+y>=P?x+y-P:x+y;}

int dec(int x,int y) {return x-y< 0?x-y+P:x-y;}

int mul(int x,int y) {return 1ll*x*y%P;}

int power(int a,int b){ int ans=1; for(;b;b>>=1,a=mul(a,a)) if(b&1) ans=mul(ans,a); return ans; }

int main(){

scanf("%d%d",&n,&m);

if(n>m) swap(n,m);

if(n==1)

printf("%d\n",power(2,m));

else if(n==2) printf("%d\n",mul(4,power(3,m-1)));

else if(n==3) printf("%d\n",mul(112,power(3,m-3)));

else{ if(m==n) printf("%d\n",(83ll*power(8,n)%P+5ll*power(2,n+7)%P)*inv384%P);

else printf("%d\n",(83ll*power(8,n)%P+power(2,n+8))*power(3,m-n-1)%P*inv128%P);

}

return 0;

}

1908: 【18NOIP提高组】填数游戏相关推荐

  1. 【题解】[NOIP2018 提高组] 填数游戏

    题意 给你一个 01 矩阵,一条从左上到右下的路径,可以表述为 DR 的字符串和 01 串.构造填数方案,满足 DR 串小的 01 串一定大. Solution: 考点:数学+搜索+找规律/推式子. ...

  2. 【NOIP 2018 提高组】填数游戏

    传送门 problem 小 D 特别喜欢玩游戏.这一天,他在玩一款填数游戏. 这个填数游戏的棋盘是一个 n×mn \times mn×m 的矩形表格.玩家需要在表格的每个格子中填入一个数字(数字 00 ...

  3. 【NOIP2018提高组D2T2】填数游戏

    前言--2020.10.17 下面的公式推导似乎有些出锅,具体情况就看图想想. Description 小D特别喜欢玩游戏.这一天,他在玩一款填数游戏. 这个填数游戏的棋盘是一个n*m的矩形表格.玩家 ...

  4. 【NOIP2018】DAY2T2——填数游戏(轮廓线状压的dp?搜索打表)

    描述 小 D 特别喜欢玩游戏.这一天,他在玩一款填数游戏. 这个填数游戏的棋盘是一个n × m的矩形表格.玩家需要在表格的每个格子中填入一个数字(数字 0 或者数字 1),填数时需要满足一些限制. 下 ...

  5. 枚举算法5——填数游戏

    填数游戏,如图所示每个汉字代表一个数字,不同的汉字代表数字不同,要求填写这些汉字代表的数字. [分析] 从图中可以看出,共有5个汉字,每个汉字是数字0~9中的一个.显然"北"和&q ...

  6. P5023 填数游戏

    题目描述 小 D 特别喜欢玩游戏.这一天,他在玩一款填数游戏. 这个填数游戏的棋盘是一个n×m的矩形表格.玩家需要在表格的每个格子中填入 一个数字(数字 0或者数字 1),填数时需要满足一些限制. 下 ...

  7. 170713 逆向-填数游戏

    1625-5 王子昂 总结<2017年7月13日> [连续第284天总结] A. CISCN 结合WP再战RE B. 这么久之后完整的wp终于出来了,回过头再做一遍之前的re 首先是最早放 ...

  8. 【NOIP2018】D2T2 填数游戏

    @填数游戏@ @题目描述@ @题解@ @代码@ @end@ @题目描述@ 小 D 特别喜欢玩游戏.这一天,他在玩一款填数游戏. 这个填数游戏的棋盘是一个 n×m 的矩形表格.玩家需要在表格的每个格子中 ...

  9. 啊哈添柴挑战Java1581. 填数游戏(入门版)

    啊哈添柴--挑战 1581. 填数游戏(入门版) /*** @author yinglongwu*/ //1581. 填数游戏(入门版) public class Main {public stati ...

最新文章

  1. UA SIE545 优化理论基础1 凸分析8 极点与极方向
  2. waf可以查看post请求吗_WAF是如何被绕过的?
  3. JQuery 判断滚动条是否到底部
  4. vue爬坑之路2----vue实例
  5. python函数命名空间_python (函数命名空间和作用域)
  6. linux命令界面输入不了密码,如何在 Linux 中不输入密码运行 sudo 命令
  7. [暗黑破坏神2]PLUGY与HACKMAP共存
  8. CAD中如何裁剪需要的区域
  9. Elasticsearch7.13+kibana7.13安装
  10. array方法常用记载
  11. 安装wordcloud库的方法
  12. 蛋白质结构与功能的预测方法总结和资料汇总
  13. 谷歌浏览器上传文件总是无反应,导致浏览器崩溃的问题
  14. 人机交互——人机交互设备
  15. spring boot视频-网易云课堂视频目录
  16. 达梦数据库DSC集群安装文档
  17. Vue 项目运行完成后自动打开浏览器【多种方法】
  18. 用java判断一个数是否为质数
  19. 如何用计算机扫描,如何使用打印机操作面板的扫描至计算机功能?
  20. No.055<软考>《(高项)备考大全》【冲刺9】《软考高项英语备考》

热门文章

  1. 《攻守道》笔记(3)
  2. android 美团拆包,如何进行拆包合包操作?
  3. Joel Spolsky在耶鲁大学的演讲
  4. mysql模糊查找表名
  5. OSChina 娱乐弹弹弹——程序猿如何防火防盗防单身 OR 防败家?
  6. 在线教育重新被点燃:火花思维逆势融资8500万美元
  7. 华为服务器显示灯p02,华为服务器uid灯蓝色
  8. C#按钮添加图片的解决
  9. 我的世界匠魂钢怎么做
  10. 逃脱者2服务器不稳定,逃脱者2EPIC版新手常见问题解决方法汇总