牛客網 慄醬的異或和(博弈論)

2021-09-27 09:55:34 字數 681 閱讀 3634

博弈論初步。。

基本上算裸的nim問題。但注意必須從k堆開始取,之後就相當於乙個nim問題。

經典博弈論問題,奇異局勢為所有的石子堆數量的異或和為0,在此局勢下先手必敗,反之,如果我們盡量給對手製造奇異局勢,則必勝。

由於除了第k堆以外的拿取是自由的,我們先求出它們的異或和,如果這個異或和小於第k堆的數量,我們便可以在第一步拿走第k堆的a[k] - sum個石子,留給對手奇異局勢。

如果異或和等於a[k],則一開始就是奇異局勢,必敗。

如果異或和大於a[k],無論起手怎麼拿,都無法留給對手奇異局勢,也就是說起手沒法給對手奇異局勢,取完以後所有的石子的異或和不為0,而第一步以後問題已經變成了純nim問題,相當於對手起手所有石子的異或和不為0,對手必勝,我們也是必敗的。

#include

using

namespace std;

const

int n =

100000+10

;int a[n]

;int

main()

if(sum < a[k]

) flag =1;

printf

("%s\n"

, flag ?

"yes"

:"no");

}}

慄醬的異或和

多組資料,資料第一行t表示資料組數。每組資料第一行乙個n,k表示一共有n堆石子,接下來你試圖從第k堆開始取,從第二行開始,每隔乙個空格乙個第i堆石子的數量ai。n 105,ai 109輸出 yes 或 no 代表從該堆開始取是否可以必勝 如果足夠聰明 示例1複製 2 3 21 2 3 2 12 1複...

慄醬的異或和

時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 多組資料,資料第一行t表示資料組數。每組資料第一行乙個n,k表示一共有n堆石子,接下來你試圖從第k堆開始取,從第二行開始,每隔乙個空格乙個第i堆石子的數量ai。n ...

牛客網 慄醬的數列 kmp

解題思路 其實一開始我只想到了暴力的方法,複雜度mn.後來網上找了題解 發現竟然還可以用kmp做,因為題目要求 a 1 b1 k a 2 b2 k a m bm k。那麼可以改造一下,變成 a2 a1 b2 b1 k 0,這樣就有可比性了。分成 a2 a1 項和 b2 b1 項,這種形式之和自己陣列...