HDU 1847

题意略。

思路:又忘了dp,搜索这种暴力方法了。。。。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1005;

bool sg[maxn];
int mm[maxn];

void init(){
    mm[0] = -1;
    for(int i = 1;i < maxn;++i){
        mm[i] = (i & (i - 1)) == 0 ? mm[i - 1] + 1 : mm[i - 1];
    }
}

int main(){
    init();
    sg[0] = false;
    for(int i = 1;i < maxn;++i){
        bool jud = true;
        for(int j = 0;j <= mm[i];++j){
            int nxt = i - (1<<j);
            jud = (jud && sg[nxt]);
        }
        sg[i] = !jud;
    }
    int n;
    while(scanf("%d",&n) == 1){
        printf("%s
",sg[n] ? "Kiki" : "Cici");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/tiberius/p/9353425.html