Codeforces 1248C Ivan the Fool and the Probability Theory(推公式)
题意
一个n*m的网格图,每个格子可以染黑色、白色,问你每个格子最多有一个相邻颜色相同的方案数
n,m<=1e5
思路
我们先处理\(1 \times m\)的情况
设\(f[i][j]\)为前\(i\)个格子,最后一个为\(j\)的方案数
可以得到递推式\(f[i][j]=f[i-1][j\bigoplus 1]+f[i-2][j\bigoplus 1]\)
那么\(1\times m\)的答案为\(f[m][0]+f[m][1]\)
引理
这题中的合法的染色图相邻两行要么完全相同,要么完全相反
证明:
假设第\(i\)行和第\(i+1\)行部分相同,部分相反,设白色是\(0\),黑色是\(1\)
那么就存在一个位置\(j\),使得\(a[i+1][j]=a[i][j],a[i+1][j+1]!=a[i][j+1]\)(先不等后相等一样)
因为这四个方格可选的颜色只有两个,所以在\(a[i+1][j+1]\)和\(a[i][j+1]\)中一定有一个和\(a[i+1][j]\)与\(a[i][j+1]\)相同
也就是说,这四个方格中出现了三个一样的颜色,无论怎么组合都不满足题意,
所以不存在部分相同部分相反,引理得证
有了以上结论,我们可以可以找"什么时候完全相同,什么时候完全相反"了
可以发现,当一行里存在连续两个连续一样的颜色的时候,下一行一定与该行相反
也就是说,如果确定了第一行,里面有两个连续一样的颜色,对答案的贡献为1
第一行的这种情况方案数为\(f[m][0]+f[m][1]-2\)
而排除的这两种,就是第一行为\(10101010..\)和\(01010101..\)两种方案
由于引理的存在,我们可以知道,当每一行的第一个元素确定的时候,我们就确定了这行跟上一行完全相同还是相反
所以这种情况的贡献就是第一列的合法方案数,即\(f[n][0]+f[n][1]\)
终上所述,答案为\(f[m][0]+f[m][1]+f[n][0]+f[n][1]-2\)
代码
ll n,m;
ll f[maxn][3];
ll F[maxn];
int main(){
scanf("%lld %lld", &n, &m);
f[1][0]=f[1][1]=1;
f[2][0]=f[2][1]=2;
F[1]=2;F[2]=4;
for(int i = 3; i <= max(n,m); i++){
f[i][1]=(f[i-1][0]+f[i-2][0])%mod;
f[i][0]=(f[i-1][1]+f[i-2][1])%mod;
F[i]=(f[i][0]+f[i][1])%mod;
}
printf("%lld",(F[n]+F[m]-2+mod)%mod);
return 0;
}
Codeforces 1248C Ivan the Fool and the Probability Theory(推公式)的更多相关文章
- Codeforces 1239A. Ivan the Fool and the Probability Theory
传送门 注意到连续两个格子如果有相同颜色那么一路过去的都可以确定 比如一开始染了这两个位置: 然后发现后面整片过去都可以确定: 对于横着的情况也是一样,然后就会发现不可能出现横着两个和竖着两个同时都有 ...
- Codeforces Round #594 (Div. 1) A. Ivan the Fool and the Probability Theory 动态规划
A. Ivan the Fool and the Probability Theory Recently Ivan the Fool decided to become smarter and stu ...
- Codeforces Round #594 (Div. 2) - C. Ivan the Fool and the Probability Theory(思维)
题意:给n*m的网格涂黑白两种颜色,保证每个格子上下左右的四个格子中最多只有一个格子与自己颜色相同,问有多少种涂法?结果$mod1000000007$ 思路:先只考虑一行有多少种涂法 $dp[i][0 ...
- Codeforces Round #594 (Div. 1) Ivan the Fool and the Probability Theory
题意:给你一个NxM的图,让你求有多少符合 “一个格子最多只有一个同颜色邻居”的图? 题解:首先我们可以分析一维,很容易就可以知道这是一个斐波那契计数 因为dp[1][m]可以是dp[1][m-1]添 ...
- Codeforces Round #594 (Div. 2) C. Ivan the Fool and the Probability Theory (思维,递推)
题意:给你一个\(n\)x\(m\)的矩阵,需要在这些矩阵中涂色,每个格子可以涂成黑色或者白色,一个格子四周最多只能有\(2\)个和它颜色相同的,问最多有多少种涂色方案. 题解:首先我们考虑一维的情况 ...
- CF1239A Ivan the Fool and the Probability Theory
思路: 可以转化为“strip”(http://tech-queries.blogspot.com/2011/07/fit-12-dominos-in-2n-strip.html)问题.参考了http ...
- CF C.Ivan the Fool and the Probability Theory【思维·构造】
题目传送门 题目大意: 一个$n*m$的网格图,每个格子可以染黑色.白色,问每个格子最多有一个相邻格子颜色相同的涂色方案数$n,m<=1e5$ 分析: 首先,考虑到如果有两个相邻的格子颜色相同, ...
- C - Ivan the Fool and the Probability Theory---div2
题目连接:https://codeforces.com/contest/1248/problem/C 思路: 注意上下两排的关系,如果说上面那一排有两个方格连续,那么他相邻的两排必定和他相反,如果说当 ...
- Codeforces Round #133 (Div. 2), A.【据图推公式】 B.【思维+简单dfs】
Problem - 216A - Codeforces Problem - B - Codeforces A Tiling with Hexagons 题意: 给出a b c ,求里面有多少个六边形 ...
随机推荐
- Flutter 不能热加载,热重载按钮灰色,无法点击,flutter doctor 显示NO_PROXY is not set
一.现象: Flutter 不能热加载 热重载按钮灰色,无法点击. 二.分析原因: 终端 flutter doctor 显示 NO_PROXY is not set 没有设置无代理的端口 终端:flu ...
- 类加载器在Tomcat中的应用
之前有文章已经介绍过了JVM中的类加载机制,JVM中通过类加载加载class文件,通过双亲委派模型完成分层加载.实际上类加载机制并不仅仅是在JVM中得以运用,通过影响字节码生成和类加载器目前已经有了许 ...
- 2018 东北地区大学生程序设计竞赛(ABEHIK)
HDU6500:Problem A. Game with string 题意: 给你一个字符串s以及它的m个子串的首尾位置,现在Alice和 Bob两个人轮流在任一子串的前面或者后面加1个字符,要求加 ...
- Collection 的子类 List
List集合的一些使用方法: 一. 声明集合: List<String> list = new ArrayList<String>(); 二.往集合里面添加元素 list.ad ...
- leetcode腾讯精选练习之两数相加
两数相加 题目: 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字.如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们 ...
- 图解kubernetes调度器SchedulingQueue核心源码实现
SchedulingQueue是kubernetes scheduler中负责进行等待调度pod存储的对,Scheduler通过SchedulingQueue来获取当前系统中等待调度的Pod,本文主要 ...
- VMware下Hadoop 2.4.1完全分布式集群平台安装与设置
1 VM下Ubuntu安装和配置 1.1 安装Ubuntu系统 这个就不说了,不知道的可以去看看其他的博文. 1.2 集群配置 搭建一个由3台机器组成的集群: IP user/passw ...
- JS获取时间戳的几种方法与区别
var today = new Date() Date.now()) Date.parse(today) today.valueOf()) today.getTime() 可以看出,第二种是精确到秒的 ...
- Android学习进度一
在解决了电脑产生的一系列问题之后成功安装了Android Studio,并在其自带的手机模拟器上成功运行了第一个App(Hello World!),通过这个最简单的App研究了App基本的工程结构,为 ...
- .Net Core Web Api实践(三).net core+Redis+docker实现Session共享
前言:上篇文章介绍了.net core+Redis+IIS+nginx实现Session共享,本来打算直接说明后续填坑过程,但毕竟好多坑是用docker部署后出现的,原计划简单提一下.net core ...