hdu 1847 巴什博弈 Or sg函式

2021-07-30 13:59:55 字數 1444 閱讀 7532

problem description

大學英語四級考試就要來臨了,你是不是在緊張的複習?也許緊張得連短學期的acm都沒工夫練習了,反正我知道的kiki和cici都是如此。當然,作為在考場浸潤了十幾載的當代大學生,kiki和cici更懂得考前的放鬆,所謂「張弛有道」就是這個意思。這不,kiki和cici在每天晚上休息之前都要玩一會兒撲克牌以放鬆神經。

「公升級」?「雙扣」?「紅五」?還是「鬥地主」?

當然都不是!那多俗啊~

作為計算機學院的學生,kiki和cici打牌的時候可沒忘記專業,她們打牌的規則是這樣的:

1、 總共n張牌;

2、 雙方輪流抓牌;

3、 每人每次抓牌的個數只能是2的冪次(即:1,2,4,8,16…)

4、 抓完牌,勝負結果也出來了:最後抓完牌的人為勝者;

假設kiki和cici都是足夠聰明(其實不用假設,哪有不聰明的學生~),並且每次都是kiki先抓牌,請問誰能贏呢?

當然,打牌無論誰贏都問題不大,重要的是馬上到來的cet-4能有好的狀態。

good luck in cet-4 everybody!

input

輸入資料報含多個測試用例,每個測試用例佔一行,包含乙個整數n(1<=n<=1000)。

output

如果kiki能贏的話,請輸出「kiki」,否則請輸出「cici」,每個例項的輸出佔一行。

sample input 1 3

sample output

kiki

cici

思路1:如果n是3的倍數時,先手必敗,否則先手必勝,因為此時你可以將n全部拿完或者將n的個數轉移成3的倍數。(你可以拿1個或者2個)

**如下

#include 

#include

#include

#include

#include

using

namespace

std;

int main()

思路2:sg函式

**如下

#include 

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

const

int n = 1010;

int sg[n], vis[n];

int s[n];//每次可以走的步數

void get_sg()

}}int main()

return

0;}

hdoj1847(巴什博弈)

problem description 大學英語四級考試就要來臨了,你是不是在緊張的複習?也許緊張得連短學期的acm都沒工夫練習了,反正我知道的kiki和cici都是如此。當然,作為在考場浸潤了十幾載的當代大學生,kiki和cici更懂得考前的放鬆,所謂 張弛有道 就是這個意思。這不,kiki和ci...

博弈 巴什博弈

只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m個。最後取光者得勝。顯然,如果n m 1,那麼由於一次最多只能取m個,所以,無論先取者拿走多少個,後取者都能夠一次拿走剩餘的物品,後者取勝。因此我們發現了如何取勝的法則 如果n m 1 r s,r為任意自然數,s m 那麼先取...

HDU 2188 巴什博弈

題解 剛開始沒思路,後來知道是巴士博弈,茅塞頓開。參考部落格 這道題是先到n誰就贏,林隊先投,問林隊能贏不,所以應該站在先手的角度看怎麼去贏。比如n m 1,不管先手怎麼投,後手肯定贏,所以先手要想贏,必須給後手造成他去投時n m 1,所以當n m 1 r s,先手取s,如果後手取k,先手再取m 1...