description
m堆石子,兩人輪流取.只能在1堆中取.取完者勝.先取者負輸出no.先取者勝輸出yes,然後輸出怎樣取子.例如5堆 5,7,8,9,10先取者勝,先取者第1次取時可以從有8個的那一堆取走7個剩下1個,也可以從有9個的中那一堆取走9個剩下0個,也可以從有10個的中那一堆取走7個剩下3個.
input
輸入有多組.每組第1行是m,m<=200000. 後面m個非零正整數.m=0退出.
output
先取者負輸出no.先取者勝輸出yes,然後輸出先取者第1次取子的所有方法.如果從有a個石子的堆中取若干個後剩下b個後會勝就輸出a b.參看sample output.
sample input
245 45
33 6 9
55 7 8 9 10
0
sample output
noyes9 5
yes8 1
9 010 3
解題思路:
ac**:
#include #include using namespace std;
int a[200005];
int main()
if(ans)
}else
printf("no\n");
}return 0;
}
取 m堆 石子遊戲(尼姆博弈)
description m堆石子,兩人輪流取.只能在1堆中取.取完者勝.先取者負輸出no.先取者勝輸出yes,然後輸出怎樣取子.例如5堆 5,7,8,9,10先取者勝,先取者第1次取時可以從有8個的那一堆取走7個剩下1個,也可以從有9個的中那一堆取走9個剩下0個,也可以從有10個的中那一堆取走7個剩...
HDU 2176 取 m堆 石子遊戲 尼姆博弈)
思路 對於一組數,必勝態肯定是所有數異或後不為0 必敗態的話異或之後為0 必勝態可以轉換成必敗態。即從a i 中選擇乙個數是他變成其他所有a i 數的異或和。這樣最終異或值為0,使得對手陷入必敗態。相關知識可以檢視 include include include include using name...
取石子遊戲之尼姆博弈
尼姆博弈 有三堆各若干個物品,兩個人輪流從某一堆取任意多的物品,規定每次至少取乙個,多者不限,最後取光者得勝 這種情況與二進位制有著很大的關係,我們用 a,b,c 來表示某種局勢,那麼 0,0,0 必然為奇異局勢,最後乙個面對這個局勢的必敗。0,n,n 也是種奇異局勢。因為如果對手在其中一堆取m個石...