P5023 填数游戏
题目描述
小 D 特别喜欢玩游戏。这一天,他在玩一款填数游戏。
这个填数游戏的棋盘是一个n×m的矩形表格。玩家需要在表格的每个格子中填入 一个数字(数字 0或者数字 1),填数时需要满足一些限制。
下面我们来具体描述这些限制。
为了方便描述,我们先给出一些定义:
我们用每个格子的行列坐标来表示一个格子,即(行坐标,列坐标)。(注意: 行列坐标均从 00 开始编号)
合法路径 P:一条路径是合法的当且仅当:
- 这条路径从矩形表格的左上角的格子(0,0)出发,到矩形的右下角格子 (n−1,m−1)结束;
- 在这条路径中,每次只能从当前的格子移动到右边与它相邻的格子,或者 从当前格子移动到下面与它相邻的格子。
例如:在下面这个矩形中,只有两条路径是合法的,它们分别是P1: (0,0) → (0,1) → 1,1)和P2:(0,0) → (1,0) → (1,1)。
对于一条合法的路径 P,我们可以用一个字符串w(P)来表示,该字符串的长度为n+m−2,其中只包含字符“R”或者字符“D”, 第 i 个字符记录了路径P 中第 i 步的移动 方法,“ R”表示移动到当前格子右边与它相邻的格子,“ D”表示移动到当前格子下面 与它相邻的格子。例如,上图中对于路径P1,有 =w(P1)= "RDRD";而对于另一条路径P_2P2, 有w(P_2) =w(P2)= "DR"。
同时,将每条合法路径 P 经过的每个格子上填入的数字依次连接后,会得到一个长 度为n+m−1的 01 字符串,记为 s(P)。例如,如果我们在格子(0,0)和(1,0)上填入数字 0,在格子(0,1)和(1,1)上填入数字 1(见上图红色数字)。那么对于路径P1,我们可以得 到 s(P1)= "011",对于路径P2,有s(P2)= "001"。
游戏要求小 D 找到一种填数字0、1 的方法,使得对于两条路径P1, P2,如果w(P1)>w(P2),那么必须s(P1)≤s(P2)。我们说字符串 a 比字符串 b 小,当且仅当字符串 a 的字典序小于字符串 b 的字典序,字典序的定义详见第一题。但是仅仅是找一种方法无法满 足小 D 的好奇心,小 D 更想知道这个游戏有多少种玩法,也就是说,有多少种填数字 的方法满足游戏的要求?
小 D 能力有限,希望你帮助他解决这个问题,即有多少种填 0、1 的方法能满足题目要求。由于答案可能很大,你需要输出答案对10^9+7取模的结果。
输入格式
输入文件共一行,包含两个正整数 n,m,由一个空格分隔,表示矩形的大小。其 中 n 表示矩形表格的行数,m 表示矩形表格的列数。
输出格式
输出共一行,包含一个正整数,表示有多少种填 00、11 的方法能满足游戏的要求。 注意:输出答案对 10^9+7 取模的结果。
输入输出样例
2 2
12
3 3
112
5 5
7136
说明/提示
【样例解释】
【数据规模与约定】
思路
洛谷巨佬
代码:
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;const int Mod=1e9+7;long long n,m;long long ksm(long long a,long long b) {long long r=1;for(; b; a=a*a%Mod,b/=2)if(b&1)r=r*a%Mod;return r;
}int main () {scanf("%lld%lld",&n,&m);if(n>m)swap(m,n);if(n==1)printf("%lld\n",ksm(2,m));else if(n==2)printf("%lld\n",4*ksm(3,m-1)%Mod);else if(n==3)printf("%lld\n",112*ksm(3,m-3)%Mod);else {if(m==n)printf("%lld\n",(83*ksm(8,n)%Mod+5*ksm(2,n+7)%Mod)*190104168%Mod);elseprintf("%lld\n",(83*ksm(8,n)%Mod+ksm(2,n+8))*ksm(3,m-n-1)%Mod*570312504%Mod);}return 0;
}
转载于:https://www.cnblogs.com/mysh/p/11357866.html
P5023 填数游戏相关推荐
- 2018D2T2 P5023 填数游戏
P5023 填数游戏 https://www.luogu.com.cn/problem/P5023 解题参考: https://www.acwing.com/activity/content/code ...
- 【NOIP2018】DAY2T2——填数游戏(轮廓线状压的dp?搜索打表)
描述 小 D 特别喜欢玩游戏.这一天,他在玩一款填数游戏. 这个填数游戏的棋盘是一个n × m的矩形表格.玩家需要在表格的每个格子中填入一个数字(数字 0 或者数字 1),填数时需要满足一些限制. 下 ...
- 枚举算法5——填数游戏
填数游戏,如图所示每个汉字代表一个数字,不同的汉字代表数字不同,要求填写这些汉字代表的数字. [分析] 从图中可以看出,共有5个汉字,每个汉字是数字0~9中的一个.显然"北"和&q ...
- 1908: 【18NOIP提高组】填数游戏
[题目描述] 小 D 特别喜欢玩游戏.这一天,他在玩一款填数游戏. 这个填数游戏的棋盘是一个n×mn×m的矩形表格.玩家需要在表格的每个格子中填入一个数字(数字 00 或者数字 11),填数时需要满足 ...
- 170713 逆向-填数游戏
1625-5 王子昂 总结<2017年7月13日> [连续第284天总结] A. CISCN 结合WP再战RE B. 这么久之后完整的wp终于出来了,回过头再做一遍之前的re 首先是最早放 ...
- 【NOIP 2018 提高组】填数游戏
传送门 problem 小 D 特别喜欢玩游戏.这一天,他在玩一款填数游戏. 这个填数游戏的棋盘是一个 n×mn \times mn×m 的矩形表格.玩家需要在表格的每个格子中填入一个数字(数字 00 ...
- 【NOIP2018】D2T2 填数游戏
@填数游戏@ @题目描述@ @题解@ @代码@ @end@ @题目描述@ 小 D 特别喜欢玩游戏.这一天,他在玩一款填数游戏. 这个填数游戏的棋盘是一个 n×m 的矩形表格.玩家需要在表格的每个格子中 ...
- 【NOIP2018提高组D2T2】填数游戏
前言--2020.10.17 下面的公式推导似乎有些出锅,具体情况就看图想想. Description 小D特别喜欢玩游戏.这一天,他在玩一款填数游戏. 这个填数游戏的棋盘是一个n*m的矩形表格.玩家 ...
- 啊哈添柴挑战Java1581. 填数游戏(入门版)
啊哈添柴--挑战 1581. 填数游戏(入门版) /*** @author yinglongwu*/ //1581. 填数游戏(入门版) public class Main {public stati ...
最新文章
- python【数据结构与算法】二分模板
- JS原型继承和类式继承
- 如何让文本框中只能输入手机号码
- 6 步搭建数据平台—从指标体系到相关技术 | 周四话数据
- python免杀技术---复现+改进----1
- Matplotlib - 柱状图、直方图、条形图 bar() barh() 所有用法详解
- Go语言并发编程简介
- 动态主机配置协议DHCP
- Java1.5并发包下阻塞队列的生产者与消费者功能简单实现
- php 最小二乘法,XPS复杂谱图的非线性最小二乘法拟合(NLLSF)操作指南
- 2017国二c语言考试试卷,2017备考计算机二级C语言真题试卷
- go import导入包详解
- GeForce Experience 安装时乱码解决
- 记录一次 AGP 调研过程中的思考,我从一个事故搞出了一个故事!
- android中的m、mm、mmm、make指令
- 整型和字符串相互转换
- Oracle 数据库备份脚本
- 什么是DevOps模式
- 电脑族科学护眼五常识
- java实现身份证号校验
热门文章
- 常用纸张及特性,印刷常用规格尺寸
- eHIDS 一款基于eBPF的HIDS开源工具
- 计算机开机其他用户,Win8.1系统下取消开机显示“其他用户”的方法
- 下载:简体中文版Live Messenger 8.1 Beta
- 深度学习热点|超直观无公式图解Contrastive Predictive Coding从脸盲说起
- DOS批处理简明高级教程
- python关于二手房的课程论文_用Python对二手房信息数据清洗及简单分析
- 我的Lenovo ThinkPad R60e 键盘按键失灵!
- 动态内存的申请和非动态内存的申请_深圳罗湖“限制非深户申请公办学位”惹争议,官方权威回应来了...
- Leetcode广度优先搜索笔记2 腐烂的橘子