[CodeVs]谁是赢家

时间:2019-09-22
本文章向大家介绍[CodeVs]谁是赢家,主要包括[CodeVs]谁是赢家使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

[CodeVs]谁是赢家

一道博弈,能在考场上推出正确公式我也很吃惊

很难解释,大概是

首先,每步都是最优解,所以不可能有God!

如果我要先手赢,所以我要我出很大你出很小的情况时最后一次我出一个\(2\)~\(9\)我就大于\(n\),而且我出很大你也出很大时你不能使结果大于\(n\)

如果我要后手赢,所以我要你出很小时我出\(2\)~\(9\)我就大于n,而且我出很大是你也出很大你不能结果大于\(n\)

然后大概是

\(9*2*9\)

\(2*9*2*9\)

这样下去

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define ll long long
ll t, n;
ll a[20], b[20];
inline ll read() {
    ll s = 0, w = 1;
    char c = getchar();
    for (; !isdigit(c); c = getchar()) if (c == '-') w = -1;
    for (; isdigit(c); c = getchar()) s = (s << 1) + (s << 3) + (c ^ 48);
    return s * w;
}
int main() {
    t = 1;
    for (register ll i = 1; i <= 15; i++) {
        a[i] = b[i - 1] + 1;
        if (i % 2 == 1)
            b[i] = t * 9, t *= 9;
        else
            b[i] = t * 2, t *= 2;
    }
    n = read();
    for (register ll i = 1; i <= 15; i++)
        if (a[i] <= n && n <= b[i])
            if (i % 2 == 1)
                printf("Nic");
            else
                printf("Susan");
    return 0;
} 

原文地址:https://www.cnblogs.com/Agakiss/p/11569307.html