\(\\\)

\(Description\)


用\(1\times 2\)的矩形和面积为\(3\)的\(L\)形去覆盖一个\(2\times N\) 的矩形,求方案数对\(10^4+7\)取模后的结果。

允许用于覆盖的图形旋转。两个方案不同当且仅当覆盖后形成的边界线至少有一处不同。

  • \(N\in [1,10^{100000}]\)

\(\\\)

\(Solution\)


神仙出题人神仙做法

设\(f[i][0/1]\)表示当前处理到第 \(i\) 位,前面的列都已经填满,当前位置填满 \(/\) 剩一个没填的方案数。

转移分放什么讨论,注意横着并排两个长条的情况要直接计数,新放置一个 \(L\) 形有两种不同的方式:

\[\begin{align}f[i][0]=f[i-1][0]+f[i-1][1]+f[i-2][0]\end{align}
\]

\[\begin{align}f[i][1]=2\times f[i-2][0]+f[i-1][1]\end{align}
\]

把下面的式子带入\((3)\),有

\[\begin{align}f[i][0]=f[i-1][0]+f[i-2][0]+f[i-2][1]+2\times f[i-3][0]\end{align}
\]

然后再把\((1)\)式中的\(i-1\)代入,有

\[f[i][0]=2\times f[i-1][0]+f[i-3][0]
\]

于是可以矩阵快速幂了。复杂度\(\text O(log (10^{100000}))\),因为快速幂迭代的时候指数是\(N\)需要高精度所以会\(T\);

然后黑科技十进制快速幂:\(A^N=A^{\lfloor\frac{N}{10}\rfloor}A^{N\%10}\),显然指数部分就可以直接按照高精按位计算了。

还有神仙做法是找循环节,发现是模数\(-1\),打个表就好了......

\(\\\)

\(Code\)


#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define R register
#define mod 10007
#define gc getchar
using namespace std; inline int rd(){
int x=0; char c=gc();
while(!isdigit(c)) c=gc();
while(isdigit(c)){x=((x<<1)+(x<<3)+(c^48))%(mod-1);c=gc();}
return x;
} int n,f[mod]={1,1,2}; int main(){
n=rd();
for(R int i=3;i<=n;++i) f[i]=((f[i-1]*2)+f[i-3])%mod;
printf("%d",f[n]);
return 0;
}

[ Nowcoder Contest 167 #D ] 重蹈覆辙的更多相关文章

  1. [ Nowcoder Contest 167 #C ] 部分和

    \(\\\) \(Description\) 给出一个长度为\(N\)的数组\(A[i]\),保证\(N\)为 \(2\) 的整次幂. 对于每个 \(i\ (i\in [0,N))\)求所有满足\(( ...

  2. 「NowCoder Contest 295」H. Playing games

    还是见的题太少了 「NowCoder Contest 295」H. Playing games 题意:选出尽量多的数使得异或和为$ 0$ $ Solution:$ 问题等价于选出尽量少的数使得异或和为 ...

  3. Nowcoder contest 370B Rinne Loves Graph 【分层图最短路】

    <题目链接> 题目大意: Island 是有一些奇怪的城镇和道路构成的(题目需要,游戏党勿喷),有些城镇之间用双向道路连接起来了,且每条道路有它自己的距离.但是有一些城镇已经被派兵戒严,虽 ...

  4. Nowcoder contest 370H Rinne Loves Dynamic Graph【分层图最短路】

    <题目链接> 题目大意:Rinne 学到了一个新的奇妙的东西叫做动态图,这里的动态图的定义是边权可以随着操作而变动的图.当我们在这个图上经过一条边的时候,这个图上所有边的边权都会发生变动. ...

  5. Nowcoder contest 370F Rinne Loves Edges (简单树形DP) || 【最大流】(模板)

    <题目链接> 题目大意: 一个 $n$ 个节点 $m$ 条边的无向连通图,每条边有一个边权 $w_i$.现在她想玩一个游戏:选取一个 “重要点” S,然后选择性删除一些边,使得原图中所有除 ...

  6. Nowcoder contest 392 I 逛公园 (无向图割边模板)

    <题目链接> 题目描述: 月月和华华一起去逛公园了.公园很大,为了方便,可以抽象的看成一个N个点M条边的无向连通图(点是景点,边是道路).公园唯一的入口在1号点,月月和华华要从这里出发,并 ...

  7. [nowcoder]contest/172/C保护

    C国有n个城市,城市间通过一个树形结构形成一个连通图.城市编号为1到n,其中1号城市为首都.国家有m支军队,分别守卫一条路径的城市.具体来说,对于军队i,他守卫的城市区域可以由一对二元组(xi,yi) ...

  8. [ Nowcoder Contest 175 #B ] 区间

    \(\\\) \(Description\) 给出一个长度为\(N\)的序列\(A[1]...A[N]\),定义一个合法区间 \([L,R]\) 当且仅当区间\(GCD\) 在这个区间内,求最长合法区 ...

  9. [ Nowcoder Contest 165 #D ] 合法括号序列

    \(\\\) \(Description\) 键盘上有三个键,敲击效果分别是: 在输出序列尾部添加一个左括号 在输出序列尾部添加一个右括号 删除输出序列尾部的第一个元素,若输出序列为空,则什么都不发生 ...

随机推荐

  1. 洛谷 P1457 城堡 The Castle

    P1457 城堡 The Castle 题目描述 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张“幸运爱尔兰”(一种彩票).结果这 ...

  2. Bug记载2之Vue.JS路由定义的位置

    <!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" ...

  3. 一 hadoop 相关介绍

    hadoop 相关介绍 hadoop的首页有下面这样一段介绍.对hadoop是什么这个问题,做了简要的回答. The Apache™ Hadoop® project develops open-sou ...

  4. Django学习系列之重写User模型和登录验证

    重写User模型 Django内置的User模型可能不适合某些项目,我们可能要基于内置的添加一些字段 创建users app startapp users 修改settings.py配置文件,覆盖默认 ...

  5. Office 针式打印机如何调节边距

    1 右击针式打印机,选择"打印机属性"   2 点击"打印机参数设置"选项卡,之前打印出来如果发现上下距离不合适,可以通过调节但也纸页顶距来调整   该参数值可 ...

  6. Swift—使用try?和try!区别-仅供参考

    在使用try进行错误处理的时候,经常会看到try后面跟有问号(?)或感叹号(!),他们有什么区别呢? 1.使用try?  try?会将错误转换为可选值,当调用try?+函数或方法语句时候,如果函数或方 ...

  7. Linux地址ping不通情况怎么办?

    查看原文:http://www.ibloger.net/article/325.html Linux地址ping不通情况怎么办? 问题:今天写了一个微信支付的项目.有一个class中使用了httpPo ...

  8. 开拓新途径找出新方法,上海SEO公司分享3个操作看看是否可行

    开拓新途径找出新方法,上海SEO公司分享3个操作看看是否可行 内容收录,外链公布,流量点击.用户体验.这是SEO优化的几个核心和重点.也是SEO站长每天都在绞尽脑汁进行操作的SEO重心,影响着非常多人 ...

  9. c# DataGridView样式设置无效

    对DataGridView中的某些行设置样式时,无效,最后发现,我是先设置完样式再进行展现的this.controls.Add,应该先展现完了,再设置样式.

  10. 利用函数计算构建微信小程序的Server端

    10分钟上线 - 利用函数计算构建微信小程序的Server端-博客-云栖社区-阿里云 https://yq.aliyun.com/articles/435430 函数计算  读写 oss import ...