取 m堆 石子遊戲(尼姆博弈)

2021-06-23 01:06:54 字數 811 閱讀 8608

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

2

45 45

33 6 9

55 7 8 9 10

0

sample output

no

yes9 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個石...