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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • nginx配置ssl证书实现https访问_ssl证书有效期

    nginx配置ssl证书实现https访问_ssl证书有效期1,登录阿里云,工作台找SSL证书或者安全下找CA证书2,点击创建证书(或购买证书),创建好以后点击证书申请、3,设置配置以及域名信息,仅填写圈住内容,其他默认即可4,随后等待一会,查看状态,是否为 已签发5,为已签发时,点击下载选择下载类型6,下载后解压文件7,上传至服务器,存放位置,先找到nginx所在位置 “/nginx/conf/”找到该位置创建“cert”把刚才解压的两个文件存放至此。8,开始nginx配置内容`server { #SSL 访问端口号为 443 li

    2022年8月19日
    5
  • IoT — (四) 物联网系统架构介绍[通俗易懂]

    IoT — (四) 物联网系统架构介绍[通俗易懂]  物联网(IoT)是目前最新最热的技术热点之一,也是这个信息化时代的重要发展节点。相对于互联网而言,物联网的本质在于“万物相连”。物联网的核心和基础仍然是互联网,是在互联网基础上延伸和扩展的网络;其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信,也就是物物相息。  物联网操作系统概述:尽管物联网的发展形态受到普遍看好和关注,但是“连接、区别、识别、沟通、操作”这五大问题一直如影随形…

    2022年9月17日
    3
  • centos7 top命令_linux chmod命令

    centos7 top命令_linux chmod命令top命令Linuxtop命令用于实时显示process的动态。top参数详解第一行,任务队列信息**系统当前时间:**13:52:56**系统开机后到现在的总运行时间:**up66

    2022年7月28日
    11
  • STM32 的 “位带”操作Bit-banding–学习笔记

    STM32 的 “位带”操作Bit-banding–学习笔记利用2个32MB大小的“虚拟”内存空间实现对2个1MB大小的物理内存空间进行“位”的置位和清除操作。这样就可以有效地对设备寄存器和位于SRAM中的数据变量进行位操作,而不再需要冗长的布尔逻辑运算过程。…

    2022年9月25日
    4
  • 内膜厚回声均匀会是癌_内膜回声均匀是不会病变是吗

    内膜厚回声均匀会是癌_内膜回声均匀是不会病变是吗下载数据集fromtorchvision.datasetsimportmnisttrain_set=mnist.MNIST(‘./data’,train=True,download=True)#若未找到数据集则自动下载test_set=mnist.MNIST(‘./data’,train=False,download=True)

    2022年10月9日
    2
  • java nio剖析

    java nio剖析

    2021年5月6日
    111

发表回复

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

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