题意:

用红绿蓝黄四种颜色对一序列n个方块涂色,求出绿和红色方块数同时为偶数的染色方案数。mod=10007

分析:

dp+矩阵快速幂
首先明确有三种状态:

  • 红和绿均为偶数
  • 红和绿只有一个为奇数
  • 红和绿均为奇数

设前三种方案数分别为ai,bi,ci,则可以得到以下递推式:

ai+1=2∗ai+bibi+1=2∗ai+2∗bi+2∗cici+1=2∗ci

再利用矩阵快速幂求解即可。

代码:

 #include<cstdio>
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
const int mod = 10007;
const int N=3;
struct Matrix
{int row,cal;ll m[N][N];Matrix(){row=3, cal=3;m[0][0]=2, m[0][1]=1, m[0][2]=0;m[1][0]=2, m[1][1]=2, m[1][2]=2;m[2][0]=0, m[2][1]=1, m[2][2]=2;}
};
Matrix init(Matrix a, ll t)
{for(int i = 0; i < a.row; i++)for(int j = 0; j < a.cal; j++)a.m[i][j] = t;return a;
}
Matrix mul(Matrix a,Matrix b)
{Matrix ans;ans.row = a.row, ans.cal = b.cal;ans = init(ans,0);for(int i = 0; i < a.row; i++)for(int j = 0; j < b.cal; j++)for(int k = 0; k < a.cal; k++)ans.m[i][j] = (ans.m[i][j] + a.m[i][k] * b.m[k][j])%mod;return ans;
}
ll quick_pow(ll n)
{Matrix ans, t;ans.row=1, ans.cal=3;ans.m[0][0]=1, ans.m[0][1] = 0, ans.m[0][2]=0;while(n){if(n&1) ans = mul(ans, t);t = mul(t, t);n>>=1;}return ans.m[0][0];
}
int main (void)
{int T;scanf("%d",&T);int n;while(T--){scanf("%d",&n);printf("%d\n",quick_pow(n));}return 0;
}

转载于:https://www.cnblogs.com/Tuesdayzz/p/5758785.html

POJ 3734_Blocks相关推荐

  1. POJ 3268 D-Silver Cow Party

    http://poj.org/problem?id=3268 Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...

  2. poj 2559 Largest Rectangle in a Histogram 栈

    // poj 2559 Largest Rectangle in a Histogram 栈 // // n个矩形排在一块,不同的高度,让你求最大的矩形的面积(矩形紧挨在一起) // // 这道题用的 ...

  3. POJ 2528 Mayor's posters(线段树)

    题目大意 贴海报.每张海报的高度都是一样的,唯独宽度不一样.每张海报只能占用整数倍的单位线段长度,贴了 n(n<=10000) 张海报之后,有几张能够看见(有一个角能看见这张海报也算被看见了)? ...

  4. POJ 2226 Muddy Fields 最小点覆盖+加建图(好题)

    题目链接 题目一看就是最小点覆盖,这道题与POJ - 3041 算是一类题,但是3041算是一道十分裸的,因为删除的是整行或者整列,所以图其实是现成的,但是本题的难点就在如何建图. 思路:首先还是尽量 ...

  5. poj 2681 字符串

    http://poj.org/problem?id=2681 给你任意长度的字符串,找出两串字符中不相同的字符个数(总数) #include<string> #include<cst ...

  6. (区间dp 或 记忆化搜素 )Brackets -- POJ -- 2955

    http://poj.org/problem?id=2955 Description We give the following inductive definition of a "reg ...

  7. POJ 2586 Y2K Accounting Bug(贪心)

    题目连接:http://poj.org/problem?id=2586 题意:某公司要统计全年盈利状况,对于每一个月来说,如果盈利则盈利S,如果亏空则亏空D.公司每五个月进行一次统计,全年共统计8次( ...

  8. poj 2362 Square

    #include <iostream> //参照poj 1011 sticks#include <algorithm>using namespace std;int stick ...

  9. 图论之拓扑排序 poj 2367 Genealogical tree

    题目链接 http://poj.org/problem?id=2367 题意就是给定一系列关系,按这些关系拓扑排序. #include<cstdio> #include<cstrin ...

最新文章

  1. 关于学习Python的一点学习总结(10->设置字符串格式)
  2. R语言实战应用精讲50篇(十三)-如何使用JAVA调用R语言,两种语言的完美结合
  3. windows live writer test…
  4. C Runtime Library 的来历
  5. ORA-01506: missing or illegal database name
  6. 四种形态图解_涨停板战法的四种形态(图解)
  7. 讲php fpm的书,细说PHP-fpm
  8. 新版仿小刀资源网模板—木鱼cms
  9. 小米全新5G旗舰手机即将登场 售价必将再创新高
  10. android 判断服务是否正在运行,Android 判断某个服务(service)是否运行
  11. U盘安装CentOS7的最终解决方案
  12. 【工大SCIRLab】EMNLP 2019 跨语言机器阅读理解
  13. 浙江大学计算机学院科研团队,科研团队
  14. [BZOJ3144]切糕
  15. 25张用Photoshop绘制的顶级图片
  16. oracle监控数据库工具,Oracle轻量级实时监控工具-oratop
  17. 7-62 贴“福”字
  18. ZOJ 1655 Transport Goods
  19. OFDM峰均比抑制matlab,一种降低OFDM峰均比的解决方法
  20. 深度学习中的tf.nn.softmax(logits, axis=1)以及tf.argmax(prob, axis=1)两个函数的参数以及用法

热门文章

  1. 用友U8常见问题之最大单据号修复语句
  2. 以管理员权限运行程序需注意
  3. Redis学习笔记(三)
  4. 652 Find Duplicate Subtrees
  5. F5补丁修复及几点命令
  6. 4月上旬中国万网域名总量增至245.8万个 国内份额上扬
  7. 征集公开课内容的建议
  8. 动态ACL+自反ACL
  9. 在vmware中创建共享磁盘
  10. 《Supervised Descent Method and its Applications to Face Alignment》阅读笔记