2017.2.12【初中部 GDKOI】模拟赛B组 T1:圆盘染色

【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为奇数时,输出(2n2)。当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.

我活在这夜里。无论周围多么黑暗,我都要努力发光!我相信着,终有一天,我会在这深邃的夜里,造就一道最美的彩虹。
原文地址:https://www.cnblogs.com/RainbowCrown/p/11148454.html