ZOJ 3591 Nim (NIM博弈 統計

2021-09-30 14:56:29 字數 810 閱讀 6031

by---cxlove

題目:按照某種規律生成乙個序列,選中某段連續的序列玩nim遊戲,先手能必勝的有多少種。

乍一看毫無頭緒啊。序列貌似會形成迴圈,可是數量如此之大。

先按照規則生成序列。儲存前i個堆的異或值,存在nim[i]。

如果想要必勝,是選中連續的數異或不為0,如果存在nim[i]==nim[j]則表示i+1,i+2……j的異或值0,則是一組必敗的局面。

這樣我們便想到從對立而考慮,總共的選擇是n*(n+1)/2。

將nim排序,找出相同 的nim值有多少個,便可以統計出有多少必敗的局面。

同時注意nim[i]為0的話,現在從1----i便是必敗局面,也要減掉。

另外注意int溢位

#include#include#include#include#include#include#include#include#define c    240

#define time 10

#define inf 1<<25

#define ll long long

using namespace std;

int a[100005],nim[100005];

int main()

sort(nim,nim+n);

ll sum=(ll)n*(n+1)/2;

int len=1;

for(int i=1;i}

sum-=(ll)len*(len-1)/2;

printf("%lld\n",sum);

}return 0;

}

3 5 9 列舉型別

有時,變數的取值只在乙個有限的集合內。例如 銷售的服裝或服裝只有小 中 大 和超大的四種尺寸。當然,可以將這些尺寸分別編碼為1 2 3 4或s m l x。但這樣存在著一定的隱患。在變數中很可能儲存的是乙個錯誤的值 如0或m 針對這種情況,可以自定義列舉型別。列舉型別包括有限個命名的值。例如,enu...

大洋蛋 要走了 倒數359

大洋蛋 對不起,因為這個破學校的破網路我前兩天沒上網,沒能寫日誌.大洋蛋,生日快樂!我會記住昨天的,因為你給我機會讓我陪你提前過了個生日。雖然我兩都喝的有點高.真的是酒不醉人,人自醉.但是真的挺開心的。因為讓我陪你過了個生日.下午我也不想讓你等那麼久的。只是想給你個小小的驚喜。那個小兔子我可是找了好...

359 python中的計時器timeit

通常在一段程式的前後都用上time.time 然後進行相減就可以得到一段程式的執行時間,不過python提供了更強大的計時庫 timeit 匯入timeit.timeit from timeit import timeit timeit x 1 看x 1的執行時間,執行1次 number可以省略,預...