codeforces gym #101161F-Dictionary Game(字典树+树上删边游戏)

题目链接:

http://codeforces.com/gym/101161/attachments

题意:

给一个可以变化的字典树

在字典树上删边

如果某条边和根节点不连通那么这条边也删除

谁没得删就输了

数据范围:

$1\leq n \leq 100000$

$1\leq q \leq 100000$

$1\leq |s| \leq 40$

分析:

ac代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
const int maxn = 1e5+7;
int sg[maxn*41],son[maxn*41][26],f[maxn*41],cnt;
char s[45];
int ins(){
    int now=0;
    int len=strlen(s+1);
    for(int i=1;i<=len;i++){
        int v=s[i]-‘a‘;
        if(son[now][v])now=son[now][v];
        else {
            cnt++;
            f[cnt]=now;
            son[now][v]=cnt;
            now=cnt;
            sg[cnt]=len-i;
            if(i==len)
                return cnt;
        }
    }
    return 0;
}
void up(int x){
    sg[x]=0;
    for(int i=0;i<26;i++)
        if(son[x][i])sg[x]^=(sg[son[x][i]]+1);
    if(x==0)return ;
    up(f[x]);
}
int main()
{
    int T,n,q;
    scanf("%d",&T);
    for(int cas=1;cas<=T;cas++){
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%s",s+1);
            int v=ins();
            up(v);
        }
        scanf("%d",&q);
        printf("Case %d:\n",cas);
        while(q--){
            scanf("%s",s+1);
            int v=ins();
            up(v);
            if(sg[0])printf("1\n");
            else printf("2\n");
        }
        for(int i=0;i<=cnt;i++)
            for(int j=0;j<26;j++)son[i][j]=0;
        cnt=0;
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/carcar/p/11508092.html

时间: 2024-10-15 05:19:25

codeforces gym #101161F-Dictionary Game(字典树+树上删边游戏)的相关文章

CodeForces 706D Vasiliy&#39;s Multiset (字典树查询+贪心)

题意:最开始的时候有一个集合,集合里面只有一个元素0,现在有q次操作,操作分为3种: + x: 表示向集合中添加一个元素x - x:表示删除集合中值为x的一个元素 ? x:表示查询集合中与x异或的最大值为多少 析:这是一个字典树的应用,不过确实没看出来....主要思想是这样,先用10进制数,转成二进制数,记下每个结点的0,1的个数,这样增加和删除,就是对01的删除, 剩下的就是查询,那么尽量让0和1XOR是最大的,所以,对于给定数,我们要去尽量他的XOR数,如果找到就加上,找不到,就找下一个.这

hdu 5299(树上删边游戏) Circles Game

题意: 给你一些圆圈的圆心坐标和半径,保证这些圆圈是包含或者相离的.现在两个人做博弈操作,拿掉一个圆圈,然后这个圆圈所包含的都要移除掉.两个人一直拿下去,直到某个人找不到一个可以移除的圈他就输了. 思路 学习的姿势.这是一个树上删边游戏模型: 首先按照半径升序排序,然后对于每一个圆找第一个包含它的圆,然后连一条边.建树完成. 叶子节点的SG值为0; 中间节点的 SG 值为它的所有子节点的 SG 值加 1 后的异或和; 这里可以建立成森林或者直接一棵树,没有太大区别.建成一棵树估计要方便一些吧.

【HDU 3590】 PP and QQ (博弈-Anti-SG游戏,SJ定理,树上删边游戏)

PP and QQ Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 510    Accepted Submission(s): 256 Problem Description PP and QQ were playing games at Christmas Eve. They drew some Christmas trees on

Codeforces 577E Ann and Half-Palindrome 字典树

题目链接 题意: 若一个字符串是半回文串,则满足第一位和最后一位相等, 第三位和倒数第三位相等,如此类推. 给定一个字符串s,输出s的所有子串中的半回文串字典序第k大的 字符串. good[i][j] 表示 s(i,j) 是半回文串. 把这些回文串插到字典树里 在字典树上找第k个叶子节点. 插入时:插入以i点开头的所有半回文串. #include <iostream> #include <string> #include <vector> #include <cs

Codeforces 1285D Dr. Evil Underscores(字典树,dp)

传送门 题意: 有一个长度为 \(n\ (1\leq n\leq 10^5)\)的整数序列 \(a_1,\cdots,a_n\ \ (0\leq a_i\leq 2^{30}-1)\),你需要找到一个非负整数 \(X\) 使得 \(\max(a_i\oplus X)\)最小,其中 \(\oplus\) 为按位异或运算. 输入这个序列,输出\(\max(a_i\oplus X)\)的最小值. 思路: 1.数组中的每个数的二进制下的某位(第k位)都是0或者是1,那么x的第k位取值是0或者1,使得答案

博弈论之树上删边游戏

可以说成是树上的NIM游戏嘛 POJ3710 再树上删边,树是带环的,然后基本题意还是和NIM游戏一致 按环分类讨论,如果是奇数环 所有后继SG值都会是偶数,所以这个状态SG为1 把环缩成一个点+1条边 如果是偶数环,那么后继SG非0,此环SG=1,就将环缩为1个点 对于环,利用tarjan+栈预处理 1 #include<cstdio> 2 #include<cstring> 3 const int maxn=1005; 4 int n,m,top,cnt; 5 bool vis

uva 1519 - Dictionary Size(字典树)

题目链接:uva 1519 - Dictionary Size 题目大意:给出n个字符串组成的字典,现在要添加新的单词,从已有单词中选出非空前缀和非空后缀,组成新单词.问说能组成多少个单词. 解题思路:建立一棵前缀树和一棵后缀树,有多少节点即为有多少个前缀,扣除中间的部分即可加上长度为1的字符串即可. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const

Codeforces GYM 100114 D. Selection 线段树维护DP

D. Selection Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Description When selecting files in an application dialog, Vasya noted that he can get the same selection in different ways. A simple mouse click selects a sing

Codeforces Gym 100114 H. Milestones 离线树状数组

H. Milestones Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Description The longest road of the Fairy Kingdom has n milestones. A long-established tradition defines a specific color for milestones in each region, with a