Lời giải LATGACH4 – Lát gạch 4

Nguồn bài http://vn.spoj.com/problems/LATGACH4/

Đề bài LATGACH4 spoj

Cho một hình chữ nhật kích thước 2xN (1<=N<10^9). Hãy đếm số cách lát các viên gạch nhỏ kích thước 1×2 và 2×1 vào hình trên sao cho không có phần nào của các viên gạch nhỏ thừa ra ngoài, cũng không có vùng diện tích nào của hình chữ nhật không được lát.

Input

Gồm nhiều test, dòng đầu ghi số lượng test T ( T<=100 ). T dòng sau mỗi dòng ghi một số N.

Output

Ghi ra T dòng là số cách lát tương ứng lấy phần dư cho 111539786.

Example

Input:
3
1
2
3

Output:
1
2
3

Code tham khảo LATGACH4 spoj

const   fi='';
        sodu = 111539786;
        nmax = 1000000;

var     f:text;
        A:array[0..nmax] of longint;
        T,ti:word;
        i,tam:longint;

function fibo(n:int64):int64;
var     k1,k2:int64;
begin
        if n<=nmax then
                exit(a[n] mod sodu);

        if n mod 2 = 0 then
                begin
                        k1:=fibo(n div 2) mod sodu;
                        k2:=fibo(n div 2 - 1) mod sodu;
                        fibo:=(((k1*k1) mod sodu )+ ((k2*k2) mod sodu)) mod sodu;
                end
        else
                fibo:= (fibo(n div 2)*((fibo(n div 2 + 1) + fibo(n div 2 - 1)) mod sodu)) mod sodu;
end;

begin
        A[1]:=1;
        a[2]:=2;
        for i:=3 to nmax do
                a[i]:=(a[i-1]+a[i-2]) mod sodu;

        assign(f,fi); reset(f);
        readln(f,t);
        for ti:=1 to t do
                begin
                        readln(f,tam);
                        writeln(fibo(tam));
                end;
        close(f);
end.

 

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *