ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CF1239A. Ivan the Fool and the Probability Theory

2019-11-01 10:01:58  阅读:336  来源: 互联网

标签:Fool 颜色 CF1239A fib int 涂成 一列 Ivan include


题目:伊凡傻子与概率论

一看我还以为是真·概率论……

一句话题意:

有一个$n \times m$网格图,每个格可以被涂成白色或黑色,现在定义 ‘随机图’ :每个点的上下左右最多只有一个格与其颜色相同,请计算其数量,对$10^9+7$取模。

题解:

第一次见$Fibonacci$计数。

首先我们思考一下,染色的情况有哪些?

一.完全棋盘

如下,仿佛没啥:

1

二.有两个块卡在一起

发现如果有两个块颜色一致,如果要保证合法就一定将整行列的颜色涂成一致。

2

2

这样就可以实现将二维的棋盘分行列一维化。

现在我们考虑$(1,1)$涂成白色的情况(黑色同理直接$\times 2$即可)

那么第一列的情况就已经确定了(并且后面的列也可以通过第一行的情况推过来)

于是设$f_i$为上述情况下放置$i$列的的情况数。

于是设初态$f_1=1,f_2=2$

如果新放置的这一列和上一列的颜色相同,那么方案数就是$f_{i-2}$

如果和上一列的颜色相反,方案数就是$f_{i-1}$

那么$$f_i=f_{i-1}+f_{i-2}(i \geq 3)$$

这柿子……就是$Fibonacci$吧……

对行列分别求$f$,但是不要忘记把重的情况(完全棋盘)减掉。

于是……

(考场推荐使用打表找规律)

 

#include <iostream>
#include <cstring>
#include <cstdio>
#define LL long long
#define N 111111

using namespace std;

const int Mod=1e9+7;

LL fib[N],m,n;

int main(){
	fib[1]=1,fib[2]=2;
	for(int i=3;i<=100000;i++){
		fib[i]=fib[i-1]+fib[i-2]%Mod;
	}
	cin>>n>>m;
	cout<<2*((fib[n]+fib[m])%Mod-1+Mod)%Mod<<endl;
}

标签:Fool,颜色,CF1239A,fib,int,涂成,一列,Ivan,include
来源: https://www.cnblogs.com/kalginamiemeng/p/CF1239A.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有