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 ,求里面有多少个六边形 ...
随机推荐
- Python for Data Analysis 学习心得(三) - 文件读写和数据预处理
一.Pandas文件读写 pandas很核心的一个功能就是数据读取.导入,pandas支援大部分主流的数据储存格式,并在导入的时候可以做筛选.预处理.在读取数据时的选项有超过50个参数,可见panda ...
- cassandra中的ACID,与RDBMS中的事务有何不同?
Cassandra中的ACID标准 Apache Cassandra不遵循具有回滚或锁定机制的ACID(原子性,一致性,隔离性,持久性)事务,而是提供原子,隔离和持久的事务,并具有最终和可调的一致性, ...
- wannafly 27 D 巧妙求取约数
链接:https://www.nowcoder.com/acm/contest/215/D来源:牛客网 题目描述 “我不知道你在说什么,因为我只是个pupil.”--绿魔法师 一个空的可重集合S. n ...
- 记录初试Netty(2)-服务端心跳检测
今天在在搭建的netty框架中添加心跳机制,特此记录一下: 1.什么是心跳机制? 心跳是在TCP长连接中,客户端和服务端定时向对方发送数据包通知对方自己还在线,保证连接的有效性的一种机制 在 ...
- 【JavaScript 基础知识】一篇关于 JavaScript 一些知识点的总结
JavaScript 中基础数据类型 数据类型名称 数据类型说明 Undefined 只有一个值,即 undefined ,声明变量的初始值. Null 只有一个值,即 null ,表示空指针, ...
- Java知识体系框架
前言:自从出生,每个人都是一个学习者或探索者.永远保持一颗谦逊的心态,遵循一定的方法和规范,去学习和实践,永远记得走走停停,多回头看看自己走过的路,温故而知新,也能更好地指导未来的路怎么走(同样,本篇 ...
- BFT-SMaRt:用Netty做客户端的可靠信道
目录 一.Netty服务端的构建 1. 父类构造函数 ① 查找缓存 ② 相关日志 2. 服务端构造 ① 配置读取 ② 服务端配置 3. 服务端功能 ① 通用接口功能 ② Channel处理器 4. 节 ...
- 关于爬虫的日常复习(6)—— pyquery库
- Qt Installer Framework翻译(3-2)
添加组件 如果用户在初始安装期间未选择所有可安装组件,则后续也可以使用包管理器从仓库中获取剩余组件进行安装.包管理器是维护工具的一部分,该维护工具在初始安装过程中与应用程序一起被安装.仅当包含组件的仓 ...
- 开始使用Manjaro
Manjaro是什么? 一个基于Arch系列,开源的linux发行版 Mnajrao官网了解更多,这里不做更多阐述内容 为什么使用Manjaro 第一点,为了方便自己隔离腾讯网游 第二点,更方便的学习 ...