1. 程式人生 > >BZOJ5435: 取石子(博弈)(佔位)

BZOJ5435: 取石子(博弈)(佔位)

5435: 取石子

Time Limit: 10 Sec  Memory Limit: 512 MB
Submit: 35  Solved: 10
[Submit][Status][Discuss]

Description

有 n 堆石子排成一行,第 i 堆石子的個數為 xi。 Alice 和 Bob 輪流取石子,每人每次從兩端的石子中選擇一堆取走,Alice 先手。 我們知道在傳統的取石子游戲中,sg 函式的值為每堆石子個數的異或和。 Alice 和 Bob 都希望自己取到的石子的異或和比對方大。你需要求出誰能獲勝。 有多組資料。

Input

第一行一個正整數 t 表示資料組數。每組資料第一行一個正整數 n。第二行 n 個整數 x1~xn。 【資料範圍】 Subtask 1 (5pts):n<=15。 Subtask 2 (11pts):n<=100,xi<=50。 Subtask 3 (17pts):n<=500。 Subtask 4 (67pts):無特殊限制。 對於全部資料,1<=t<=100,1<=n<=10000,1<=xi<=10^9。

Output

每組資料一行一個字串表示答案,平局輸出 Draw。

Sample Input

3
2
3 3
2
3 5
3
4 4 4

Sample Output

Draw
Alice
Bob

思路:設ans=所有數異或和。  如果ans=0,那麼無論A取到任何數x,B的數也是x,即是平局。

那麼我們考慮ans!=0,那麼ans的最高位為i,有(1<<i)一定是奇數個1,結果取決於這一位,我們按照a[]是否有(1<<i),把所有數換位0或者1。

然後現在題目變為了01串,有奇數個1,問輪流從兩端取,問先手是否能取到奇數個1。

然後?