zoukankan      html  css  js  c++  java
  • poj2505

    博弈

    题意:两个人轮流用2~9来乘n,使n不断扩大,n开始为1。当给一个固定值k,谁先使n超过k谁赢。

    分析:能到达必败态的状态为必胜态,只能到达必胜态的状态为必败态。对于给定的k,n>=k时为必败态,所有能到达这些必败态的n为必胜态,这些必胜态中最小的是ceil(k/9.0)。凡是大于它的都可以直接到达必败态。然而有些状态只能到达必胜态,就是那些乘二都要进入必胜态的数字,这些数中最小的是ceil(ceil(k/9.0)/2.0)。这样我们又得到了一批必败态,我们只要按照这种方法不断地由必败推必胜,由必胜推必败,即可知道1是必败还是必胜。也就知道了stan是赢还是输了。

    View Code
    #include <iostream>
    #include
    <cstdlib>
    #include
    <cstring>
    #include
    <cstdio>
    #include
    <cmath>
    using namespace std;

    int main()
    {
    //freopen("t.txt", "r", stdin);
    long long n;
    while (scanf("%I64d", &n) != EOF)
    {
    while (true)
    {
    n
    = ceil(n / 9.0);
    if (n == 1)
    {
    printf(
    "Stan wins.\n");
    break;
    }
    n
    = ceil(n / 2.0);
    if (n == 1)
    {
    printf(
    "Ollie wins.\n");
    break;
    }
    }
    }
    return 0;
    }
  • 相关阅读:
    <iframe>相关问题
    文字描边
    jquery 设置css margin-left
    uni-app mustache表达式
    Uni-app 响应式像素upx
    Uni-app页面进入和返回
    Uni-app 生命周期
    Sql添加/删除默认值
    Uni-app初体验(创建新路由)
    Uni-app初体验(页面绑定数据)
  • 原文地址:https://www.cnblogs.com/rainydays/p/2169471.html
Copyright © 2011-2022 走看看