【题意】
有n个方块,现用红黄蓝绿四种颜色将他们染色,要求红色的方块和蓝色的方块个数均为偶数个,求方案数 mod 10007
【输入】
第一行一个t,表示有t组数据
每组数据一个数字表示n
【输出】
对于每组数据,输出一个输出表示方案数
用一个2位的2进制数表示红色方块和蓝色方块的奇偶性,发现染i个的方案数只跟染i-1个的方案数有关
所以可以用矩阵来搞一搞
program poj3734;
type
square=array [1..4,1..4] of longint;
const
maxn=10007;
root:square=((2,1,1,0),
(1,2,0,1),
(1,0,2,1),
(0,1,1,2));
var
ans:square;
t,n,i:longint;
function matrixmul (a,b:square):square;
var
i,j,k:longint;
ans:square;
begin
fillchar(ans,sizeof(ans),0);
for i:=1 to 4 do
for j:=1 to 4 do
for k:=1 to 4 do
ans[i,j]:=(ans[i,j]+a[i,k]*b[k,j]) mod maxn;
exit(ans);
end;
function power (m:longint):square;
var
ans,now:square;
begin
now:=root;
fillchar(ans,sizeof(ans),0);
ans[1,1]:=1;
ans[2,2]:=1;
ans[3,3]:=1;
ans[4,4]:=1;
while m<>0 do
begin
if m and 1 = 1 then ans:=matrixmul(ans,now);
m:=m div 2;
now:=matrixmul(now,now);
end;
exit(ans);
end;
begin
read(t);
while t>0 do
begin
dec(t);
read(n);
ans:=power(n);
writeln(ans[1,1]);
end;
end.