【NOIP模拟】圆盘染色(color)
Description
将一个圆盘分为n个扇形,每个扇形可涂红、黄、蓝三种颜色中的一种,但相邻两个扇形的颜色必须不同,问有多少中涂法。
Input
第一行一个数t表示t组数据,接下来t行每行一个数n表示分成n个扇形。
Output
对于组数据输出一个数表示染色的方案数,结果模12345678。
Sample Input
2
1
2
Sample Output
3
6
Data Constraint
数据范围:
30%的数据t<=10,n<=100。
100%的数据t<=10000,n<=10^9。
题解:
这里首先将一个做题方法。发现任何暴力或不像高级算法的数学题,请想想找规律。
这个找规律就是打一个暴力,然后一个一个去把各种样例以正确的暴力求出来,再手玩一下就可以发现规律了。这是一种很好用的规律题方法。
本题就按照以上的方法求出一些规律就手玩一下。找出一个规律:当n为奇数时,输出(2n−2)。当n为偶数时,输出(2n+2)。当n=1时特判。A了。
标程:
var
t,i,j,k,l,n,m:longint;
function qpower(a,b,n:int64):int64;
var
t,y:int64;
begin
t:=1;
y:=a;
while b<>0 do
begin
if(b and 1)=1 then
t:=t*y mod n;
y:=y*y mod n;
b:=b div 2;
end;
exit(t);
end;
begin
assign(input,'color.in');reset(input);
assign(output,'color.out');rewrite(output);
readln(t);
for m:=1 to t do
begin
readln(n);
if n=1 then
begin
writeln(3);
end
else
if n=2 then
begin
writeln(6);
end
else
begin
i:=qpower(2,n,12345678);
if n mod 2=1 then
writeln((i-2) mod 12345678)
else
writeln((i+2) mod 12345678);
end;
end;
close(input);close(output);
end.