Problem H. Game with the Stones博弈论

    xiaoxiao2021-04-17  36

    题意:

    之前理解错了题意了,没有看清楚

    每一次都是将所有的石子都分一遍(这样的话就只用考虑最大堆即可)

    两个人轮流分石子,Constantine这个人先手

    每次将每一堆石子分为两堆,如果这一堆只有一个石子就不用分了

    最后一个人没有办法再分堆的时候就输了

    题解:

    草稿纸上递推模拟:

    1      败

    2      胜(因为2分解得到1+1导致另外一个人败)

    3      败(因为3分解得到2+1导致另外一个人胜)

    4      胜(因为4分解得到2+2导致另外一个人败)

    5      胜(因为5分解得到3+2导致另外一个人败)

    6      胜(因为6分解得到3+3导致另外一个人败)

    7      败(因为7任意一种分解后无法使另外一个人败)

    ..........

    ..........

    最后我们可以发现

    1   3   7  15   31  ..........

    这些数字是一定失败的

    故有了下面的代码

    #include<stdio.h> int main() { int n; //freopen("in.txt","r",stdin); while(scanf("%d",&n)!=EOF) { int t=0,temp; while(n--) { scanf("%d",&temp); t=t>temp?t:temp; } long long cnt=1; while(cnt<t) cnt=cnt*2+1; puts(cnt!=t?"Constantine":"Mike"); } return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-673593.html

    最新回复(0)