Codeforces 1239A. Ivan the Fool and the Probability Theory
注意到连续两个格子如果有相同颜色那么一路过去的都可以确定
比如一开始染了这两个位置:

然后发现后面整片过去都可以确定:

对于横着的情况也是一样,然后就会发现不可能出现横着两个和竖着两个同时都有的情况,因为这样一定会冲突,就一定不合法了
(自己画一下就知道了)
那么现在只要对行列分别计算即可,直接设 $f[i][0/1][0/1]$ 表示前 $i$ 个位置,当前位置为 $0/1$ 上一个位置为 $0/1$ 时的方案数
那么转移十分显然,然后答案就是行任意放的方案 $\sum_{i=0}^{1}\sum_{j=0}^{1}f[n][i][j]$ 加上列任意放的方案 $\sum_{i=0}^{1}\sum_{j=0}^{1}f[m][i][j]$ 减 $2$
减 $2$ 是因为黑白染色情况下的方案会被行和列都算到,要减去多算的次数
然后就可以过了,但是事实上如果直接设 $g[i]=\sum_{i=0}^{1}\sum_{j=0}^{1}f[n][i][j]$ ,然后分析原本 $f$ 的方程,那么你会发现 $g[i]$ 恰好等于 $g[i-1]+g[i-2]$
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=2e5+,mo=1e9+;
inline int fk(int x) { return x>=mo ? x-mo : x; }
int n,m,f[N][][];
int main()
{
n=read(),m=read(); int mx=max(n,m);
if(n==&&m==) { printf("2\n"); return ; }
f[][][]=f[][][]=f[][][]=f[][][]=;
for(int i=;i<=mx;i++)
{
f[i][][]=f[i-][][];
f[i][][]=fk(f[i-][][]+f[i-][][]);
f[i][][]=fk(f[i-][][]+f[i-][][]);
f[i][][]=f[i-][][];
}
if(n>m) swap(n,m);
if(n==) { printf("%d\n", fk(fk(f[m][][]+f[m][][]) + fk(f[m][][]+f[m][][])) ); return ; }
int ans=fk(fk(f[m][][]+f[m][][]) + fk(f[m][][]+f[m][][]));
ans=fk(ans-+mo);
ans=fk(ans+ fk(fk(f[n][][]+f[n][][]) + fk(f[n][][]+f[n][][])));
printf("%d\n",ans);
}
Codeforces 1239A. Ivan the Fool and the Probability Theory的更多相关文章
- Codeforces 1248C Ivan the Fool and the Probability Theory(推公式)
题意 一个n*m的网格图,每个格子可以染黑色.白色,问你每个格子最多有一个相邻颜色相同的方案数 n,m<=1e5 思路 我们先处理\(1 \times m\)的情况 设\(f[i][j]\)为前 ...
- 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 1100F Ivan and Burgers
CodeForces题面 Time limit 3000 ms Memory limit 262144 kB Source Codeforces Round #532 (Div. 2) Tags da ...
随机推荐
- MyBatis动态Sql 的使用
Mapper.xml提示: 1:mapper包中新建一个文件:mybatis-3-mapper.dtd 2:在web app libraries/mybatis.jar/org.apache.ibat ...
- Netfilter 之 五个钩子点
概述 在协议栈的三层IPv4(IPv6还没看,不清楚)数据包的处理过程中,可能经过Netfilter的五个钩子点,分别为NF_INET_PRE_ROUTING.NF_INET_LOCAL_IN.NF_ ...
- php屏蔽电话号码中间四位
php屏蔽电话号码中间四位 一.总结 一句话总结: 直接就是substr_replace函数:$str = substr_replace("13966778888",'****', ...
- MAC为Apache2服务器配置多个虚拟主机
Mac 下自带的 Apache 配置 2016年01月25日 00:25:03 阅读数:1292 参考: http://www.cnblogs.com/snandy/archive/2012/11/1 ...
- ORA-00054: 资源正忙 --锁表的解决方法
问题描述 ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效 发生异常 原因:其他Session已经对目标表做了操作,且未提交操作,导致锁表,新的Session无法 ...
- Python异步IO之协程(二):使用asyncio的不同方法实现协程
引言:在上一章中我们介绍了从yield from的来源到async的使用,并在最后以asyncio.wait()方法实现协程,下面我们通过不同控制结构来实现协程,让我们一起来看看他们的不同作用吧- 在 ...
- [Kaggle] How to kaggle?
成立于2010年的Kaggle是一个进行数据发掘和预测竞赛的在线平台.与Kaggle合作之后,一家公司可以提供一些数据,进而提出一个问题,Kaggle网站上的计算机科学家和数学家,也就是现在所说的数据 ...
- Go项目实战:打造高并发日志采集系统(六)
前情回顾 前文我们完成了日志采集系统的日志文件监控,配置文件热更新,协程异常检测和保活机制. 本节目标 本节加入kafka消息队列,kafka前文也介绍过了,可以对消息进行排队,解耦合和流量控制的作用 ...
- Python multiprocess模块(上)
multiprocess模块 一. Process模块介绍 1. 直接使用Process模块创建进程 (1)主进程和子进程 (2)if __name__ == "__main__" ...
- nexus私服库被误删如何恢复
恢复步骤: 1,登录nexus服务器,找到nexus安装目录(默认/usr/local/下): 2,找到sonatype-work/nexus/trash 下找到你删除的库: 3,copy到指定的so ...