多組資料,資料第一行t表示資料組數。每組資料第一行乙個n,k表示一共有n堆石子,接下來你試圖從第k堆開始取,從第二行開始,每隔乙個空格乙個第i堆石子的數量ai。
n≤105, ai≤109
輸出「yes」或「no」代表從該堆開始取是否可以必勝(如果足夠聰明)。
示例1複製
2複製3 21 2 3
2 12 1
noyes
小太陽哥哥說,如果想贏,就試圖把每堆石子數量的異或和變為0,最終便可以獲得勝利,不相信自己證一下。
小資料較多,不要使用memset,可能導致tle。
#include #include #include using namespace std ;
const int max = 100000 + 10 ;
typedef long long ll ;
ll a[max] ;
int main()
if(a[k]>ans)/*如果第k堆的石子大於其餘石子的異或和,那麼只需拿走多的那部分,使剩餘的所有堆的石子異或和為0,則先手必贏*/
cout<<"yes"
cout<<"no"<}
return 0 ;
}
慄醬的異或和
時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 多組資料,資料第一行t表示資料組數。每組資料第一行乙個n,k表示一共有n堆石子,接下來你試圖從第k堆開始取,從第二行開始,每隔乙個空格乙個第i堆石子的數量ai。n ...
牛客網 慄醬的異或和(博弈論)
博弈論初步。基本上算裸的nim問題。但注意必須從k堆開始取,之後就相當於乙個nim問題。經典博弈論問題,奇異局勢為所有的石子堆數量的異或和為0,在此局勢下先手必敗,反之,如果我們盡量給對手製造奇異局勢,則必勝。由於除了第k堆以外的拿取是自由的,我們先求出它們的異或和,如果這個異或和小於第k堆的數量,...
慄醬的數列
慄醬有乙個長度為n的數列a,乙個長度為m的數列b,現在詢問a中有多少個長度為m的連續子串行a 滿足 a 1 b1 k a 2 b2 k a m bm k。輸入描述 第一行乙個數t,表示有t組資料。對於每組資料,第一行三個整數,n,m,k。第一行輸入n個數,a1,a2,an,表示a數列中的數,第二行輸...