\(\\\)

\(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;
}

最新文章

  1. Vmware扩展磁盘如何不需重启系统
  2. oracle数据库从入门到精通
  3. C#程序
  4. A Word (Or Two) On Quality
  5. 一个FragmentActivity多个Fragment的生命周期事件记录
  6. CAD输出的局部平面坐标数据配准转换到WGS84坐标系
  7. ZOJ 2710 Two Pipelines
  8. poj Minimum( CutStoer Wagner算法)
  9. MyBatis入门一
  10. 智能指针之 auto_ptr
  11. 使用idea搭建Scala 项目
  12. SpringJDBC数据库的基本使用
  13. python sockerserver tcp 文件下载 udp
  14. 什么是 Spring AOP 和代理
  15. NDT(Normal Distributions Transform)算法原理与公式推导
  16. 看过这两张图,就明白 Buffer 和 Cache 之间区别
  17. C语言 &#183; 确定元音字母位置
  18. log4j.properties配置文件详解
  19. 20165233 实验一 Java开发环境的熟悉
  20. JavaScript es6 class类的理解。

热门文章

  1. Linux 攻击防护基础排查
  2. Ubuntu 16.04安装TortoiseSVN(基于CrossOver)
  3. frameset怎样实现整个页面的跳转
  4. 加入收藏BUG改善
  5. 使用 BenchmarkDotnet 测试代码性能 【Win10】单元测试中捕获异步方法的指定异常
  6. POJ 1159 Palindrome(字符串变回文:LCS)
  7. kafka 生产者消费者 api接口
  8. javascript下的json 序列化及反序列化
  9. 2016/2/18 html 图片热点,网页划区,拼接,表单
  10. 函数计算 触发式计算 日志 MP3 图片 合成视频