時間限制: 1000 ms 記憶體限制: 524288 kb
alice 和 bob 兩個好朋友又開始玩取石子了。遊戲開始時,有 n
'>n
n 堆石子排成一排,然後他們輪流操作(alice 先手),每次操作時從下面的規則中任選乙個:
1、從某堆石子中取走乙個;
2、合併任意兩堆石子。
不能操作的人輸。alice 想知道,她是否能有必勝策略。
第一行輸入 t
'>
t,表示資料組數。
對於每組測試資料,第一行讀入 n
'>
n;接下來 n
'>n
個正整數 a1,
a2,⋯
,an'>a1,a2,⋯,an
,表示每堆石子的數量。
對於每組測試資料,輸出一行。
輸出 yes
'>yes
表示 alice 有必勝策略,輸出 n
o'>n
o 表示 alice 沒有必勝策略。
331 1 2
23 4
32 3 5
yes對於全部資料,tnono
≤100,n
≤50,a
i≤1000
'>t≤100,n≤50,ai≤1000。t
≤100,n
≤50,a
i≤1000
'>sol:貌似和博弈論沒有半毛錢關係t≤
100,n≤
50,ai
≤1000
'>如果沒有1的堆,那麼判斷一下總算子的奇偶性即可,煩就煩在有1,t≤
100,n≤
50,ai
≤1000
'>題解上說是記搜,分四種情況(具體見注釋),不知道為什麼n=50都能過qaq
#include usingview codenamespace
std;
typedef
intll;
inline ll read()
while
(isdigit(ch))
return (f)?(-s):(s);
}#define r(x) x=read()inline
void
write(ll x)
if(x<10
)
write(x/10
); putchar((x%10)+'0'
);
return;}
#define w(x) write(x),putchar(' ')
#define wl(x) write(x),putchar('\n')
const
int n=55
;int
t;int
n,a[n];
int bo[n][n*1000
];inline
bool dfs(int num1,int
step)
intmain()
if(!cnt)
sum=max(sum,0
);
if(dfs(cnt,sum)) puts("
yes"
);
else puts("no"
); }
return0;
}/*input353
2 1 3
41 1 1 1
21 3
51 2 1 2 2
31 1 1
output
yesyes
yesno
no*/
一本通1664 例 2 取石子遊戲 2
題目描述 有一種有趣的遊戲,玩法如下 玩家 2 人 道具 n 堆石子,每堆石子的數量分別為 x1 x2 xn 規則 遊戲雙方輪流取石子 每人每次選一堆石子,並從中取走若干顆石子 至少取 1 顆 所有石子被取完,則遊戲結束 如果輪到某人取時已沒有石子可取,那此人算負。假如兩個遊戲玩家都非常聰明,問誰勝...
資訊學奧賽一本通 1218 取石子遊戲
時間限制 1000 ms 記憶體限制 65536 kb 提交數 2463 通過數 1138 有兩堆石子,兩個人輪流去取。每次取的時候,只能從較多的那堆石子裡取,並且取的數目必須是較少的那堆石子數目的整數倍,最後誰能夠把一堆石子取空誰就算贏。比如初始的時候兩堆石子的數目是25和7。25 7 11 7 ...
佇列(一本通)
這道題重點是關係的轉換和初始化 include include include includeusing namespace std int a 101 記錄接著的的那個節點 int n,m int main int ans void bfs int x,int y int main cout in...