Codeforces 455B A Lot of Games(字典树+博弈)[通俗易懂]

Codeforces 455B A Lot of Games(字典树+博弈)

大家好,又见面了,我是全栈君。

题目连接: Codeforces 455B A Lot of Games

题目大意:给定n。表示字符串集合。

给定k,表示进行了k次游戏,然后是n个字符串。每局開始。字符串为空串,然后两人轮流在末尾追加字符。保证新的字符串为集合中某字符串的前缀。不能操作者输,新一轮由上一句输的人先手。

解题思路:首先对字符集合建立字典树。然后依据博弈的必胜必败性质搜索出先手的决策状态,可决定胜败3,仅仅能胜利2,仅仅能失败1。不可掌控(即对手可决定胜败)0。
对于状态3,为必胜。能够採用前K-1场败,然后保证第K场自己先手,取必胜方案。


对于状态2,不管则们走都是赢的话,肯定是两个人轮流胜局,所以推断K的奇偶性。
对于状态1和0,必败。由于一直输,一直先手。

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
const int maxn = 1e5+5;

struct node {
    int val, arr[30];
    node () {
        val = 0;
        memset(arr, 0, sizeof(arr));
    }
}t[maxn*2];

int top = 1, len, n, k;
char str[maxn];

inline int get_node () {
    return top++;
}

void insert (int x, int d) {

    if (d == len)
        return;

    int mv = str[d] - 'a';
    if (t[x].arr[mv] == 0)
        t[x].arr[mv] = get_node();
    insert(t[x].arr[mv], d+1);
}

int solve (int x) {

    int& ans = t[x].val;
    ans = 0;

    bool flag = true;
    for (int i = 0; i < 26; i++) {
        if (t[x].arr[i]) {
            flag = false;
            ans |= solve(t[x].arr[i]);
        }
    }

    if (flag)
        ans = 1;
    return 3-ans;
}

int main () {
    scanf("%d%d", &n, &k);

    for (int i = 0; i < n; i++) {
        scanf("%s", str);
        len = strlen(str);
        insert(0, 0);
    }

    solve(0);
    int ans = t[0].val;
    if (ans < 2)
        printf("Second\n");
    else if (ans == 2)
        printf("%s\n", k&1 ? "First" : "Second");
    else
        printf("First\n");
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116051.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月26日 下午8:00
下一篇 2022年1月26日 下午9:00


相关推荐

  • MySQL8.0正确修改密码的姿势[通俗易懂]

    MySQL8.0正确修改密码的姿势[通俗易懂]mysql更新完密码,总是拒绝连接、登录失败?MySQL8.0不能通过直接修改mysql.user表来更改密码。正确更改密码的方式备注:清空root密码MySQL8.0不能通过直接修改mysql.user表来更改密码。因为authentication_string字段下只能是MySQL加密后的43位字符串密码,其他的导致错误。错误不报出,但是无法再登录mysql,总是会提示无…

    2022年8月13日
    4
  • 手把手教你训练自己的Mask R-CNN图像实例分割模型(PyTorch官方教程)

    手把手教你训练自己的Mask R-CNN图像实例分割模型(PyTorch官方教程)近来在学习图像分割的相关算法,准备试试看MaskR-CNN的效果。关于MaskR-CNN的详细理论说明,可以参见原作论文https://arxiv.org/abs/1703.06870,网上也有大量解读的文章。本篇博客主要是参考了PyTorch官方给出的训练教程,将如何在自己的数据集上训练MaskR-CNN模型的过程记录下来,希望能为感兴趣的读者提供一些帮助。PyTorch官方教程(…

    2022年8月23日
    14
  • Batch Normalization(BN)超详细解析

    Batch Normalization(BN)超详细解析单层视角神经网络可以看成是上图形式 对于中间的某一层 其前面的层可以看成是对输入的处理 后面的层可以看成是损失函数 一次反向传播过程会同时更新所有层的权重 W1 W2 WL 前面层权重的更新会改变当前层输入的分布 而跟据反向传播的计算方式 我们知道 对 Wk 的更新是在假定其输入不变的情况下进行的 如果假定第 k 层的输入节点只有 2 个 对第 k 层的某个输出节点而言 相当于一个线性模型 y w1x1 w2x

    2026年3月18日
    3
  • 云原生(三十六) | Kubernetes篇之Harbor入门和安装

    云原生(三十六) | Kubernetes篇之Harbor入门和安装Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器 作为一个企业级私有 Registry 服务器 Harbor 提供了更好的性能和安全 提升用户使用 Registry 构建和运行环境传输镜像的效率 Harbor 支持安装在多个 Registry 节点的镜像资源复制 镜像全部保存在私有 Registry 中 确保数据和知识产权在公司内部网络中管控 另外 Harbor 也提供了高级的安全特性 诸如用户管理 访问控制和活动审计等

    2026年3月18日
    2
  • 启动计算机配置windows7,win7开机显示准备配置Windows请勿关闭计算机 然后无限重启怎么回事…

    启动计算机配置windows7,win7开机显示准备配置Windows请勿关闭计算机 然后无限重启怎么回事…win7开机显示准备配置Windows请勿关闭计算机然后无限重启怎么回事以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!win7开机显示准备配置Windows请勿关闭计算机然后无限重启怎么回事1、原因死机了。2、解决方法1)在win7桌面的任务栏右下角找到一个旗子图标,右击弹出对话框,点击“打开操作中心”。2)在弹出…

    2022年6月17日
    388
  • 上门安装OpenClaw年入百万?装完才是噩梦!

    上门安装OpenClaw年入百万?装完才是噩梦!

    2026年3月13日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号