博弈論初步。。
基本上算裸的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 項,這種形式之和自己陣列...