1. 程式人生 > >51nod-1070-Bash遊戲 V4

51nod-1070-Bash遊戲 V4

題目描述

有一堆石子共有N個。A B兩個人輪流拿,A先拿。每次拿的數量最少1個,最多不超過對手上一次拿的數量的2倍(A第1次拿時要求不能全拿走)。拿到最後1顆石子的人獲勝。假設A B都非常聰明,拿石子的過程中不會出現失誤。給出N,問最後誰能贏得比賽。
例如N = 3。A只能拿1顆或2顆,所以B可以拿到最後1顆石子。

Input

第1行:一個數T,表示後面用作輸入測試的數的數量。(1 <= T <= 1000)
第2 - T + 1行:每行1個數N。(1 <= N <= 10^9)

Output

共T行,如果A獲勝輸出A,如果B獲勝輸出B。

樣例

input

3
2
3
4

output

B
B
A

題解

典型的斐波那契博弈
http://blog.csdn.net/dgq8211/article/details/7602807
賣個安利可以好好看看這個大大寫的證明
中心思路:
1、如果x為斐波那契數,必敗,輸出B
2、如果x不是斐波那契數,必勝,輸出A
證明連結裡有quq
然後貼程式碼(本來想直接開個陣列沒想到記憶體爆了t t)

var n,x,i:longint;
    f:array[0..1000000005] of boolean;

function check(x:longint):boolean;
var
t,a,b:longint; begin a:=1;b:=1; if x=1 then exit(true); while (a+b<1000000000) do begin t:=a;a:=b;b:=t+a; if t=x then exit(true); end; exit(false); end; begin readln(n); for i:=1 to n do begin readln(x); if check(x) then writeln('B') else writeln('A'); end; end.