poj3734 Blocks
题目大意
有n个方块,有1,2,3,4四种颜色对其进行染色,求1,2颜色的方块个数均为偶数的方案数对10007取模的值。
分析
我们假设1表示这个颜色个数是奇数,0表示是偶数,所以对于所有状态我们可以分为四种,每种对应一个二元组 ,二元组的第一项表示颜色1,第二项表示颜色2,这四种分别是(1,1),(1,0),(0,1),(0,0)。但是我们不难发现(1,0)和(0,1)这两种状态可以合为一种,所以我们可以推出:
(1,1) = 2*(1,1) + (1,0)
(1,0) = (1,1) + 2*(1,0) + 2*(0,0)
(0,0) = 2*(0,0) + (1,0)
我们通过这个便可以得到转移矩阵了。详见代码。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
const int mod = ;
struct mat {
int g[][];
};
inline mat operator * (mat a,mat b){
mat c;
for(int i=;i<=;i++)
for(int j=;j<=;j++){
int x=;
for(int k=;k<=;k++)
x=(x+a.g[i][k]*b.g[k][j]%mod)%mod;
c.g[i][j]=x;
}
return c;
}
inline int pw(int p){
mat res,a;
a.g[][]=a.g[][]=a.g[][]=a.g[][]=a.g[][]=;
a.g[][]=a.g[][]=;
a.g[][]=a.g[][]=;
res=a;
while(p){
if(p&)res=res*a;
a=a*a;
p>>=;
}
return res.g[][];
}
int main(){
int n,t;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
printf("%d\n",pw(n-));
}
return ;
}
poj3734 Blocks的更多相关文章
- poj3734 Blocks[矩阵优化dp or 组合数学]
Blocks Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6578 Accepted: 3171 Descriptio ...
- POJ3734 Blocks(生成函数)
题意 链接 长度为\(n\)的序列,用红黄蓝绿染色,其中红黄只能是偶数,问方案数 Sol 生成函数入门题 任意的是\(e^x\),偶数的是\(\frac{e^x + e^{-x}}{2}\) 最后化完 ...
- 2018.12.30 poj3734 Blocks(生成函数)
传送门 生成函数入门题. 按照题意构造函数: 对于限定必须是出现偶数次的颜色:1+x22!+x44!+...=ex+e−x21+\frac {x^2}{2!}+\frac {x^4}{4!}+...= ...
- Blocks [POJ3734] [矩阵快速幂]
题意: 有长度为n的一排格子,每个格子里面可以任意填入1,2,3,4四个数字,问1,2都为偶数个的方案 T组数据,每组数据一个n(<=1e9) 样例输入 2 1 2 样例输出 2 6 分析 设d ...
- 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM
刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...
- 【POJ-1390】Blocks 区间DP
Blocks Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5252 Accepted: 2165 Descriptio ...
- 开发该选择Blocks还是Delegates
前文:网络上找了很多关于delegation和block的使用场景,发现没有很满意的解释,后来无意中在stablekernel找到了这篇文章,文中作者不仅仅是给出了解决方案,更值得我们深思的是作者独特 ...
- poj 1390 Blocks
poj 1390 Blocks 题意 一排带有颜色的砖块,每一个可以消除相同颜色的砖块,,每一次可以到块数k的平方分数.问怎么消能使分数最大.. 题解 此题在徐源盛<对一类动态规划问题的研究&g ...
- Java 同步代码块 - Synchronized Blocks
java锁实现原理: http://blog.csdn.net/endlu/article/details/51249156 The synchronized keyword can be used ...
随机推荐
- Admin和单例模式
admin功能定制 两种定制方式: 方式一: class UserConfig(admin.ModelAdmin): list_display = ('user', 'pwd',) admin.sit ...
- 加密算法之BLOWFISH算法
加密信息 BlowFish算法用来加密64Bit长度的字符串. BlowFish算法使用两个"盒"--ungignedlongpbox[18]和unsignedlongsbox[4 ...
- ZOJ - 3201 Tree of Tree (树形背包)
题意:有一棵树,树上每个结点都有一个权值,求恰好包含k个结点的子树的最大权值. 设dp[i][j]为以结点i为根的树中包含j个结点的子树的最大权值,则可以把这个结点下的每棵子树中所包含的所有子树的大小 ...
- 作业派NABCD的特点分析
Need:根据我们用户的调查,我们发现用户希望在作业派获取一些课本上的答案等类似的东西,以方便及时解决课本的问题. Approach:但是仅仅靠管理员来上传文件时园不能解决用户的问题.所以我们想让我们 ...
- LeetCode Judge Route Circle
原题链接在这里:https://leetcode.com/problems/judge-route-circle/description/ 题目: Initially, there is a Robo ...
- XML数据库的尝试
首先祝大家新年快乐.身体健康,平安就是福气. 对于一般的个人迷你项目,数据量不大的时候,完全没有必要使用数据库,管理数据使用XML就可以了. 自己尝试写了一个XML数据库,插入1w条小记录,大概3M大 ...
- 玩转C链表
链表是C语言编程中常用的数据结构,比如我们要建一个整数链表,一般可能这么定义: 1 2 3 4 struct int_node { int val; struct in ...
- linux下的时间
1.linux下时间管理机制: 在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现.为了保持系统时间与CMOS时间的一致性,Linux每隔11分钟会 ...
- Vue开发模板简介
1. 传统发开模式的问题 用传统模式引用vue.js以及其他的js文件的开发方式,会产生一些问题. 基于页面的开发模式:传统的引用vue.js以及其他的js文件的开发方式,限定了我们的开发模式是 ...
- Winsock 传输文件
文件传输的原理:发送方把文件读到socket发送端缓冲区中,接收方把socket接收端缓端冲区中的数据写到一个新文件中.当然了,大文件需要循环读写! 服务器端为发送端: #include " ...