POJ3734

比较简单的递推题目,只需要记录当前两种颜色均为偶数, 只有一种颜色为偶数 两种颜色都为奇数 三个数量即可,递推方程相信大家可以导出。

最后来个快速幂加速即可。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<algorithm>
using namespace std;
typedef long long int LL;
const LL mt_MAXN=60;const LL mt_MAXM=60;
struct Matrix
{
LL n,m;
LL MOD;
LL a[mt_MAXN][mt_MAXM];
void clear()
{
n=m=0;
memset(a,0,sizeof(a));
}
Matrix operator +(const Matrix &b)const
{
Matrix tmp;
tmp.n=n;tmp.m=m;tmp.MOD=MOD;
for(LL i=0;i<n;++i)
for(LL j=0;j<m;++j)
tmp.a[i][j]=(a[i][j]+b.a[i][j])%MOD;
return tmp;
}
Matrix operator -(const Matrix &b)const
{
Matrix tmp;
tmp.n=n;tmp.m=m;tmp.MOD=MOD;
for(LL i=0;i<n;++i)
for(int j=0;j<m;++j)
tmp.a[i][j]=(a[i][j]-b.a[i][j]+MOD)%MOD;
return tmp;
}
Matrix operator *(const Matrix &b)const
{
Matrix tmp;
tmp.clear();
tmp.n=n;tmp.m=b.m;tmp.MOD=MOD;
for(LL i=0;i<n;++i)
for(LL j=0;j<b.m;++j)
for(LL k=0;k<m;++k)
tmp.a[i][j]=(tmp.a[i][j]+((a[i][k])*(b.a[k][j]))%MOD+MOD)%MOD;
return tmp;
} Matrix iden()
{
Matrix x;
memset(x.a,0,sizeof(x.a));
x.m=n;x.n=n;
x.MOD=MOD;
for(LL i=0;i<n;++i)
x.a[i][i]=1;
return x;
}
Matrix pow(LL t)
{
Matrix now;
now.n=n;now.m=m;now.MOD=MOD;
memset(now.a,0,sizeof(now.a));
for(LL i=0;i<n;++i)
for(LL j=0;j<m;++j)
now.a[i][j]=a[i][j];
for(LL i=1;i<t;i++)
now=now*now;
return now;
}
Matrix qpow(LL t)
{
if(n==0)return iden();
Matrix now;
now.clear();
now.n=n;now.m=m;now.MOD=MOD;
now=pow(1);
Matrix ans;
ans.clear();
ans.n=n;ans.m=m;ans.MOD=MOD;
ans=ans.iden();
while(true)
{
if(t%2==1)ans=ans*now;
t=t/2;
now=now*now;
if(t==0)break;
}
return ans;
}
}; int main()
{
int T;
scanf("%d",&T);
Matrix p;
p.clear();
p.n=p.m=3;
p.a[0][0]=2;p.a[0][1]=1;
p.a[1][0]=p.a[1][1]=p.a[1][2]=2;
p.a[2][1]=1;p.a[2][2]=2;
p.MOD=10007;
Matrix p0;
p0.clear();
p0.n=3;p0.m=1;
p0.a[0][0]=2;
p0.a[1][0]=2;
while(T--)
{
LL n;
scanf("%lld",&n);
Matrix pn=p.qpow(n-1);
Matrix ans=pn*p0;
printf("%lld\n",ans.a[0][0]);
}
return 0;
}

  

POJ 3734 Blocks 矩阵递推的更多相关文章

  1. [POJ 3734] Blocks (矩阵高速幂、组合数学)

    Blocks Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3997   Accepted: 1775 Descriptio ...

  2. POJ 3734 Blocks(矩阵快速幂+矩阵递推式)

    题意:个n个方块涂色, 只能涂红黄蓝绿四种颜色,求最终红色和绿色都为偶数的方案数. 该题我们可以想到一个递推式 .   设a[i]表示到第i个方块为止红绿是偶数的方案数, b[i]为红绿恰有一个是偶数 ...

  3. POJ 3734 Blocks (线性递推)

    定义ai表示红色和绿色方块中方块数为偶数的颜色有i个,i = 0,1,2. aij表示刷到第j个方块时的方案数,这是一个线性递推关系. 可以构造递推矩阵A,用矩阵快速幂求解. /*********** ...

  4. POJ 1664 放苹果 (递推)

    题目链接:http://poj.org/problem?id=1664 dp[i][j]表示i个盘放j个苹果的方案数,dp[i][j] 可以由 dp[i - 1][j] 和 dp[i][j - i] ...

  5. HOJ 2148&POJ 2680(DP递推,加大数运算)

    Computer Transformation Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4561 Accepted: 17 ...

  6. POJ 2506 Tiling(递推+大整数加法)

    http://poj.org/problem?id=2506 题意: 思路:递推.a[i]=a[i-1]+2*a[i-2]. 计算的时候是大整数加法.错了好久,忘记考虑1了...晕倒. #includ ...

  7. POJ 1661 Help Jimmy(递推DP)

    思路: 1. 每个板子有左右两端, dp[i][0], dp[i][1] 分别记录左右端到地面的时间 2. 从下到上递推计算, 上一层的板子必然会落到下面的某一层板子上, 或者地面上 总结: 1. 计 ...

  8. HDU 1757 A Simple Math Problem 【矩阵经典7 构造矩阵递推式】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1757 A Simple Math Problem Time Limit: 3000/1000 MS (J ...

  9. SPOJ:Fibonacci Polynomial(矩阵递推&前缀和)

    Problem description. The Fibonacci numbers defined as f(n) = f(n-1) + f(n-2) where f0 = 0 and f1 = 1 ...

随机推荐

  1. MySQL-----增

    增 **创建用户** create user 'alex'@'192.168.1.1' identified by '123123'; create user 'alex'@'192.168.1.%' ...

  2. Spring核心技术(八)——Spring自动装载的注解

    本文针对自动装载的一些注解进行描述. 基于注解的容器配置 @Required注解 @Required注解需要应用到Bean的属性的setter方法上面,如下面的例子: public class Sim ...

  3. 你需要知道的Linux安全

    1. 账号以及密码一定要复杂,密码需要符合这些规范:字符大于 10 个:至少包含大小写以及数字:密码中不能包含账号,不能包含自己的姓名全拼,不能有自己的生日数字,不能有自己的电话号码:密码要定期更换: ...

  4. stm32 调试时卡在LDR R0, =SystemInit

    网上找到的可能的原因 堆栈空间默认的太小 默认startup_stm32f10x_hd.s中 Stack_Size EQU 0x00000400,如果改大之后,可能调试就可以正常运行. 出现最多的情况 ...

  5. selenium IDE脚本编辑与操作

    1.编辑一行命令 在Table标签下选中某一行命令,命令由command.Target.value三部分组成.可以对这三部分内容那进行编辑. 然后右击这行命令,选择“Execute this comm ...

  6. JQuery_九大选择器

    JQuery_九大选择器-----https://blog.csdn.net/pseudonym_/article/details/76093261

  7. Python模块:shutil、序列化(json&pickle&shelve)、xml

    shutil模块: 高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fscr,fdst [, length])   # 将文件内容拷贝到另一个文件中 import shu ...

  8. 莎拉公主的困惑(bzoj 2186)

    Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现 ...

  9. 用jquery校验radio单选按钮(原创)

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head ...

  10. KMP算法 C#实现 字符串查找简单实现

    KMP算法 的C#实现,初级版本 static void Main(string[] args) { #region 随机字符 StringBuilder sb = new StringBuilder ...