POJ 3734_Blocks
题意:
用红绿蓝黄四种颜色对一序列n个方块涂色,求出绿和红色方块数同时为偶数的染色方案数。mod=10007
分析:
dp+矩阵快速幂
首先明确有三种状态:
- 红和绿均为偶数
- 红和绿只有一个为奇数
- 红和绿均为奇数
设前三种方案数分别为ai,bi,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相关推荐
- POJ 3268 D-Silver Cow Party
http://poj.org/problem?id=3268 Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...
- poj 2559 Largest Rectangle in a Histogram 栈
// poj 2559 Largest Rectangle in a Histogram 栈 // // n个矩形排在一块,不同的高度,让你求最大的矩形的面积(矩形紧挨在一起) // // 这道题用的 ...
- POJ 2528 Mayor's posters(线段树)
题目大意 贴海报.每张海报的高度都是一样的,唯独宽度不一样.每张海报只能占用整数倍的单位线段长度,贴了 n(n<=10000) 张海报之后,有几张能够看见(有一个角能看见这张海报也算被看见了)? ...
- POJ 2226 Muddy Fields 最小点覆盖+加建图(好题)
题目链接 题目一看就是最小点覆盖,这道题与POJ - 3041 算是一类题,但是3041算是一道十分裸的,因为删除的是整行或者整列,所以图其实是现成的,但是本题的难点就在如何建图. 思路:首先还是尽量 ...
- poj 2681 字符串
http://poj.org/problem?id=2681 给你任意长度的字符串,找出两串字符中不相同的字符个数(总数) #include<string> #include<cst ...
- (区间dp 或 记忆化搜素 )Brackets -- POJ -- 2955
http://poj.org/problem?id=2955 Description We give the following inductive definition of a "reg ...
- POJ 2586 Y2K Accounting Bug(贪心)
题目连接:http://poj.org/problem?id=2586 题意:某公司要统计全年盈利状况,对于每一个月来说,如果盈利则盈利S,如果亏空则亏空D.公司每五个月进行一次统计,全年共统计8次( ...
- poj 2362 Square
#include <iostream> //参照poj 1011 sticks#include <algorithm>using namespace std;int stick ...
- 图论之拓扑排序 poj 2367 Genealogical tree
题目链接 http://poj.org/problem?id=2367 题意就是给定一系列关系,按这些关系拓扑排序. #include<cstdio> #include<cstrin ...
最新文章
- 关于学习Python的一点学习总结(10->设置字符串格式)
- R语言实战应用精讲50篇(十三)-如何使用JAVA调用R语言,两种语言的完美结合
- windows live writer test…
- C Runtime Library 的来历
- ORA-01506: missing or illegal database name
- 四种形态图解_涨停板战法的四种形态(图解)
- 讲php fpm的书,细说PHP-fpm
- 新版仿小刀资源网模板—木鱼cms
- 小米全新5G旗舰手机即将登场 售价必将再创新高
- android 判断服务是否正在运行,Android 判断某个服务(service)是否运行
- U盘安装CentOS7的最终解决方案
- 【工大SCIRLab】EMNLP 2019 跨语言机器阅读理解
- 浙江大学计算机学院科研团队,科研团队
- [BZOJ3144]切糕
- 25张用Photoshop绘制的顶级图片
- oracle监控数据库工具,Oracle轻量级实时监控工具-oratop
- 7-62 贴“福”字
- ZOJ 1655 Transport Goods
- OFDM峰均比抑制matlab,一种降低OFDM峰均比的解决方法
- 深度学习中的tf.nn.softmax(logits, axis=1)以及tf.argmax(prob, axis=1)两个函数的参数以及用法