CF C.Ivan the Fool and the Probability Theory【思维·构造】

题目传送门

题目大意:

一个$n*m$的网格图,每个格子可以染黑色、白色,问每个格子最多有一个相邻格子颜色相同的涂色方案数
$n,m<=1e5$

分析:

首先,考虑到如果有两个相邻的格子颜色相同,那么这两行/列的格子状态就确定了。比如:

分享图片

 

 

 在中间两个爱心格子被确定的情况下,第二列和第三列的涂色情况就已经被确定了。实际上,第一列和第四列涂的颜色也确定了。(最后这句话我们留着待会儿分析)

分享图片

 

 

 同理,在中间两个星星确定的时候,第二行和第三行的涂色情况也唯一确定。实际上,第一行和第四列涂的颜色也确定了。

 


假如说在一个方格中,既有横着出现的两个连续的一样颜色的格子,也有竖着出现的两个连续的一样颜色的格子,就像这样:

分享图片

 

 分享图片

 

 分享图片

 

 

 

那么一定会产生矛盾,无论怎么挪都会产生矛盾。(橙色的部分是既需要用灰色,也需要用蓝色涂的格子,是矛盾的地方)

所以,在一种着色方案中,这种相邻两个颜色一样的情况只会在一个方向中出现,我们只需要考虑一个方向那么多行的方案数,另外一个方向的同理就好。

 


 

如果已经确定相邻两个颜色一样的格子出现的方向(为方便讨论,下面我们假设这两个格子是竖着的),那么每一行的格子颜色一定是交错的,两行之间要么一样,要么颜色相反,而且颜色一样的不能连着出现3次及以上。

在第一行确定的情况下,如果要求每一个格子的每个相邻格子的颜色都和他不一样,那么这是一个棋盘染色,就唯一确定了。

但是,按照这道题的条件来说的话,后面的格子可以有两行,也可以只有一行。(就是一次性确定两行或一次性确定一行)

Like this:

分享图片

 

 

 

分享图片

 

 

 设$f[i]$表示铺到第$i$行(前$i$行)的方案总数,那么递推式就是$f[i]=f[i-1]+f[i-2]$

(初始化$f[0]=1$是一开始就是两行连着一样的情况)

答案就是$f[n]$。

然后,还有相邻两个颜色一样的格子是竖着的,方案数就是$f[m]$,这两类在前面已经说过没有交集,答案就是$f[n]+f[m]$

然后,棋盘染色的情况在两种情况中都被计算了,所以答案要减1。

最后,黑白颜色可以反过来,所以乘2.

做完了,$Nice!$

分享图片
 1 /*
 2 ID: Starry21               
 3 */ 
 4 #include<iostream>
 5 #include<string>
 6 #include<cstdio>
 7 #include<cstring>
 8 #include<map>
 9 #include<algorithm>
10 using namespace std;
11 #define N 100005
12 #define ll long long
13 #define MOD 1000000007
14 int n,m;
15 ll f[N];
16 int main()
17 {
18     scanf("%d %d",&n,&m);
19     f[0]=f[1]=1;
20     for(int i=2;i<=max(n,m);i++)
21         f[i]=(f[i-1]+f[i-2])%MOD;
22     printf("%lld\n",2*((f[n]+f[m])%MOD-1+MOD)%MOD);
23     return 0;
24 }
代码贼短
相关文章
相关标签/搜索
三期内必开一期 铜梁县| 剑川县| 观塘区| 双流县| 江都市| 双牌县| 余姚市| 阿拉尔市| 浙江省| 桦川县| 林芝县| 湖南省| 江孜县| 博客| 海阳市| 马山县| 双柏县| 廉江市| 巴里| 盐池县| 平塘县| 石渠县| 正安县| 文安县| 宁阳县| 凤翔县| 静海县| 当阳市| 万宁市| 乐都县| 贺兰县| 喀什市| 桐梓县| 荆门市| 盘锦市| 荣昌县| 凤台县| 阳新县| 凌源市| 蛟河市| 遂宁市| 西安市| 马公市| 康平县| 岫岩| 兴宁市| 会同县| 缙云县| 曲周县| 工布江达县| 洛川县| 桐城市| 久治县| 淮安市| 南江县| 额济纳旗| 济宁市| 德安县| 揭阳市| 利川市| 北票市| 黎城县| 桂阳县| 佛学| 左贡县| 山阴县| 寿光市| 静海县| 哈尔滨市| 湘潭市| 拉孜县| 六盘水市| 驻马店市| 时尚| 凉城县| 德钦县| 蒙阴县| 湟源县| 东丽区| 永安市| 枣阳市| 贡觉县| 西乡县| 定兴县| 朝阳县| 普陀区| 武川县| 遵化市| 平昌县| 琼结县| 天台县| 中西区| 龙南县| 西青区| 云安县| 子长县| 牙克石市| 普宁市| 乌鲁木齐市| 昌图县| 图木舒克市| 鸡西市| 收藏| 德化县| 托克托县| 绿春县| 木兰县| 静宁县| 北碚区| 灯塔市| 五大连池市| 伊宁市| 祁门县| 象山县| 大同市| 黄陵县| 体育| 武夷山市| 天津市| 水城县| 平江县| 华安县| 靖州| 沽源县| 横峰县| 施秉县| 金塔县| 宿迁市| 陈巴尔虎旗| 茌平县| 惠安县| 延吉市| 洪江市| 逊克县| 馆陶县| 镶黄旗| 安岳县| 滦平县| 揭东县| 昌吉市| 安徽省| 开封市| 大渡口区| 临桂县| 达日县| 友谊县| 长兴县| 鹿泉市| 姚安县| 南乐县| 阜平县| 胶南市| 独山县| 股票| 甘孜县| 勐海县| 湘潭市| 双峰县| 五莲县| 渑池县| 内黄县| 安平县| 石渠县| 兴文县| 陵水| 三江| 赣榆县| 肇庆市| 富源县| 平顶山市| 遂川县| 河池市| 惠州市| 昂仁县| 巫溪县| 郎溪县| 永济市| 柳林县| 鲜城| 海门市| 梓潼县| 东光县| 泰宁县| 灵台县| 乐平市| 琼结县| 乳源| 白水县| 镇赉县| 舞钢市| 泰顺县| 翼城县| 木里| 阿荣旗| 宾阳县| 闽清县| 施甸县| 临湘市| 收藏| 商洛市| 旌德县| 浦城县| 明溪县| 武夷山市| 西盟| 栾川县| 大石桥市| 四子王旗| 若尔盖县| 卢氏县| 天祝| 尉犁县| 会同县| 湟中县| 大同县| 木兰县| 潜山县| 蓬莱市| 贺州市| 洱源县| 南乐县| 高密市| 遂昌县| 阿拉善右旗| 利津县| 汽车| 木里| 墨竹工卡县| 龙岩市| 安乡县| 临沧市| 通海县| 墨脱县| 江津市| 冷水江市| 定远县| 永丰县| 鄂伦春自治旗| 麦盖提县| 新兴县| 商都县| 周至县| 日照市| 永寿县| 霍州市| 磐安县| 邵武市| 九龙县| 罗平县| 宁蒗| 兴仁县| 漳州市| 南乐县| 黑山县| 大埔区| 叙永县| 二连浩特市| 石泉县| 寻乌县| 玉门市| 应用必备| 五寨县| 闽侯县| 嫩江县| 兰西县| 任丘市| 鲁甸县| 惠安县| 成安县| 祥云县| 兴隆县| 精河县| 宜城市| 新沂市| 合江县| 乌恰县| 二连浩特市| 宜城市| 龙岩市| 洮南市| 潜山县| 长治市| 太保市| 德江县| 神池县| 雷山县| 公安县| 礼泉县| 大丰市| 台江县| 科尔| 堆龙德庆县| 古交市| 芮城县| 沽源县| 屯留县| 五家渠市| 长白| 麻城市| 抚松县| 新化县| 邮箱| 玉环县| 达尔| 司法| 拉萨市| 阿城市| 沅江市| 罗城| 平顺县| 沈丘县| 蒙阴县| 广德县| 临海市| 交口县| 凤翔县| 安阳县| 综艺| 龙山县| 莫力| 洪洞县| 汤阴县| 鹤庆县| 贵南县| 宝坻区| 榆林市| 永靖县| 武鸣县| 新竹市| 阳春市| 邹城市| 靖江市| 左贡县| 黎川县| 阿勒泰市| 兰溪市| 蒙阴县| 武鸣县| 台江县| 永善县| 堆龙德庆县| 伽师县| 牟定县| 孟津县| 固安县| 九寨沟县| 团风县| 安吉县| 兴文县| 鞍山市| 兰考县| 萨嘎县| 油尖旺区| 无为县| 五指山市| 靖州| 安化县| 武冈市| 偏关县| 深水埗区| 墨玉县| 公安县| 耒阳市| 杭锦旗| 长沙县| 金秀| 黄骅市| 丰城市| 淳化县| 合作市| 克拉玛依市| 东乡县| 雷山县| 蒙山县| 正阳县| 会理县| 安庆市| 吐鲁番市| 雷波县| 新邵县| 澳门| 报价| 观塘区| 安平县| 合肥市| 十堰市| 昭苏县| 沿河| 海原县| 保德县| 北碚区| 内黄县| 榆树市| 大埔区| 兴业县| 怀安县| 泸溪县| 肥乡县| 北碚区| 府谷县| 鹿泉市| 永州市| 兴安县| 唐海县| 长白| 德阳市| 潍坊市| 杨浦区| 承德市| 大关县| 盱眙县| 基隆市| 莲花县| 聂拉木县| 松阳县| 封开县| 大埔区| 张家港市| 彭州市| 留坝县| 布尔津县| 赞皇县| 清徐县| 岢岚县| 台南县| 遵义市| 定南县| 额济纳旗| 威信县| 锦州市| 灵山县| 方正县| 汉川市| 田东县| 武宁县| 阳新县| 五指山市| 嘉峪关市| 沧源| 南郑县| 仁寿县| 政和县| 安新县| 新营市| 德清县| 泾源县| 江源县| 抚州市| 嘉峪关市| 宿州市| 武夷山市| 陆川县| 湄潭县| 承德县| 吴忠市| 北流市| 方正县| 辽阳市| 宝坻区| 邢台市| 尖扎县| 上饶县| 荔波县| 通化县| 招远市| 鲁山县| 太和县| 莒南县| 桃江县| 安远县| 日照市| 黑龙江省| 突泉县| 巍山| 长宁县| 嵩明县| 运城市| 天水市| 昆明市| 深泽县| 仪征市| 那坡县| 毕节市| SHOW| 高淳县| 昌平区| 伊宁市| 加查县| 金川县| 鄂州市| 苏尼特左旗| 星座| 连城县| 富蕴县| 微山县| 海南省| 北辰区| 金华市| 北海市| 子洲县| 克拉玛依市| 民权县| 新巴尔虎右旗| 泰和县| 股票| 浪卡子县| 紫金县| 玉田县| 措美县| 宜丰县| http://m.gz1980ballc.fun http://wap.bo2020ezails.fun http://www.gz1980planc.fun http://www.bo2020szooths.fun http://m.yqo2j4rl9v.fun http://m.gz1980cozpanyc.fun http://www.bo2020landscapes.fun http://www.yqo2j4rl8v.fun http://wap.yqo5j3rl3v.fun http://m.gz1980attezptc.fun http://wap.gz1980trackc.fun http://m.bo2020rests.fun http://www.yqo5j0rl3v.fun http://wap.yqo6j7rl1v.fun http://www.gz1980scorec.fun