传送门


problem

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

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

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

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

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

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

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

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

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

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

同时,将每条合法路径 PPP 经过的每个格子上填入的数字依次连接后,会得到一个长度为 n+m−1n + m - 1n+m−1 的 010101 字符串,记为 s(P)s(P)s(P)。例如,如果我们在格子 (0,0)(0,0)(0,0) 和 (1,0)(1,0)(1,0) 上填入数字 000,在格子 (0,1)(0,1)(0,1) 和 (1,1)(1,1)(1,1) 上填入数字 111(见上图红色数字)。那么对于路径 P1P_1P1​,我们可以得到 s(P1)=s(P_1) =s(P1​)= “011011011”,对于路径 P2P_2P2​,有 s(P2)=s(P_2) =s(P2​)= “001001001”。

游戏要求小 D 找到一种填数字 000、111 的方法,使得对于两条路径 P1P_1P1​,P2P_2P2​,如果 w(P1)>w(P2)w(P_1) > w(P_2)w(P1​)>w(P2​),那么必须 s(P1)≤s(P2)s(P_1) ≤ s(P_2)s(P1​)≤s(P2​)。我们说字符串 aaa 比字符串 bbb 小,当且仅当字符串 aaa 的字典序小于字符串 bbb 的字典序。但是仅仅是找一种方法无法满足小 D 的好奇心,小 D 更想知道这个游戏有多少种玩法,也就是说,有多少种填数字的方法满足游戏的要求?

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

数据范围:n≤8n\le 8n≤8,m≤106m\le 10^6m≤106。


solution

这算是一道打表找规律的题,考场上写了个 dfsdfsdfs 套 dfsdfsdfs 找了 n≤3n\le 3n≤3 的规律。

具体的推导过程我就不写了,可以看看这里。


code

#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;
}

【NOIP 2018 提高组】填数游戏相关推荐

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

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

  2. NOIP 2018提高组复赛C/C++试题及答案详解

    NOIP 2018提高组历年真题 CCF NOIP2018 初赛提高组 C++语言试题 第 1 页,共9 页 第二十四届全国青少年信息学奥林匹克联赛初赛 提高组 C++语言试题 竞赛时间:2018 年 ...

  3. NOIP 2018 提高组初赛试题 题目+答案+简要解析

    一.单项选择题(共 10  题,每题 2  分,共计 20  分: 每题有且仅有一个正确选项) 1. 下列四个不同进制的数中,与其它三项数值上不相等的是( ). A. (269) 16 B. (617 ...

  4. 【NOIP 2018 提高组】赛道修建

    传送门 problem C 城将要举办一系列的赛车比赛.在比赛前,需要在城内修建 mmm 条赛道. C 城一共有 nnn 个路口,这些路口编号为 1,2,-,n1,2,-,n1,2,-,n,有 n−1 ...

  5. NOIP 2018 普及组 初赛

    NOIP 2018 普及组 初赛 姐妹篇 NOIP 2018 提高组 初赛 点评 欢迎查阅此文 https://blog.csdn.net/mrcrack/article/details/830489 ...

  6. 2018D2T2 P5023 填数游戏

    P5023 填数游戏 https://www.luogu.com.cn/problem/P5023 解题参考: https://www.acwing.com/activity/content/code ...

  7. 1908: 【18NOIP提高组】填数游戏

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

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

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

  9. [NOIP 2013提高组]转圈游戏 题解

    这题在洛谷上是道黄题,即[普及/提高-] 所以虽然是提高组的,但是其实挺简单的. 我们来看下题面: [NOIP 2013]转圈游戏 刚看到题面作为一个蒟蒻感觉它都不配做黄题,但是直到我看清楚了后发现它 ...

最新文章

  1. alibaba sentinel限流组件 源码分析
  2. c++:MFC _cstring.h库常用函数
  3. 统计gitlab代码行脚本_详解代码统计工具cloc--计算文件数、空白行数、注释行和代码行...
  4. 电脑数据存储工具----光盘驱动器
  5. Item-Based Collaborative Recommender System
  6. 程序员的职业素养---转载
  7. Rails开发细节《六》ActiveRecord Validationa and Callbacks验证和回调
  8. 微服务/分布式面试题与基础知识总结汇总
  9. Ubuntu 19.04 缺少libpng12.so.0
  10. JAVA 图片URL地址转Byte文件流
  11. 单臂路由及链路聚合+实验配置(均使用思科模拟器Cisco Packet Tracer Student)
  12. docker insecure-registry
  13. 推荐下阿里巴巴开源的数据库客户端工具Chat2DB
  14. 关于学校edu邮箱登录第三方邮件客户端(例如Outlook、Foxmail、QQ邮箱、邮件App等)的注意事项
  15. 公司企业常见部门名称英译(zt)
  16. 这可能是全网Java学习路线最完整,最详细的版本了,没有之一
  17. 智能电话机器人(AI语音机器人)时什么?
  18. hadoop学习-1
  19. add_months用法解析
  20. eclipse各个版本介绍说明

热门文章

  1. SQL Sserver 2005 精简版 必须要注意的事情
  2. Win11安卓子系统无法启动怎么办?安卓子系统启用虚拟机平台教程(确保在可选的Windows功能中启用虚拟机平台)
  3. 争做新时代好少年主题团日活动PPT模板
  4. 下载:简体中文版Live Messenger 8.1 Beta
  5. 一题乱作出来的题? ?
  6. 互联网造车最靠谱的方式是合作
  7. 360极速浏览器Onetab插件存储位置
  8. Netty 中的粘包和拆包详解
  9. linux查找模糊文件位置,linux模糊查找文件用什么命令比较好
  10. 黑客利用WordPress 插件暗中建立后门网站