HDU - 1847 Good Luck in CET-4 Everybody!

4234 ワード

Good Luck in CET-4 Everybody!
Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12263    Accepted Submission(s): 7956
Problem Description
大学の英語の4級試験がもうすぐ来ます.緊張して復習していますか.短学期のACMも練習する暇がないほど緊張しているかもしれませんが、どうせ私が知っているKikiもCiciもそうです.もちろん、試験場に十数年も浸潤した現代の大学生として、KikiとCiciは試験前のリラックスをもっと知っていて、いわゆる「弛緩有道」という意味です.いいえ、KikiとCiciは毎晩休む前にトランプをして神経をリラックスします.
「アップグレード」?「ダブルボタン」?「紅五」?それとも「闘地主」ですか.
もちろん違います!それはなんと俗っぽいことか.
コンピューター学院の学生として、KikiとCiciがトランプをするときは専門を忘れていません.彼女たちのトランプのルールはこうです.
1、  全部でn枚のカード;
2、  双方が交代でカードをつかむ.
3、  1人当たりのカードの個数は2のべき乗(1,2,4,8,16...)しかありません.
4、  カードを捕まえたら、勝負の結果も出てきた.最後にカードを捕まえた人は勝者だ.
KikiもCiciも十分頭がいいと仮定し(実は仮定しなくても、頭が悪い学生はいない~)、毎回Kikiが先にカードをつかんでいると仮定しますが、誰が勝つことができますか?
もちろん、トランプは誰が勝っても問題ありませんが、重要なのはすぐに来るCET-4が良い状態になることです.
Good luck in CET-4 everybody!
 
Input
入力データには複数のテストケースが含まれ、各テストケースは1行を占め、整数n(1<=n<=1000)を含む.
 
Output
Kikiが勝てば「Kiki」を出力し、そうでなければ「Cici」を出力し、各インスタンスの出力が1行を占めます.
 
Sample Input
 
     
1 3
 

Sample Output
 
     
Kiki Cici
 

Author
lcy
 

Source
ACM Short Term Exam_2007/12/13
 

Recommend
lcy

博弈题sg函数的应用。sg函数真是个神奇的东西。
#include 
using namespace std;

int s[1100],sg[10010],n;
int SG_dfs(int x){
        int i;
        if(sg[x]!=-1)return sg[x];
        bool vis[1100];
        memset(vis,0,sizeof(vis));
        for(i=0;i=s[i]){
                        SG_dfs(x-s[i]);
                        vis[sg[x-s[i]]]=1;
                }   
        }   
        int e;
        for(i=0;;i++)
                if(!vis[i]){
                        e=i;
                        break;
                }   
        return sg[x]=e;
}

int main(){
        memset(sg,-1,sizeof(sg));
        s[0]=1;
        for (n=1;;n++){
                s[n]=2*s[n-1];
                if (s[n]>1000) break;
        }
        int k;
        while (cin>>k){
                if (SG_dfs(k)==0) cout<