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$
分析:
先对当前字符串建立字典树
每个玩家的操作其实就是删除字典树的一个子树,相当于树上删边游戏
结论:
叶子节点:$sg=0$
其他节点:sg=(所有孩子节点sg+1)的异或和
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;
}
codeforces gym #101161F-Dictionary Game(字典树+树上删边游戏)的更多相关文章
- POJ Christmas Game [树上删边游戏 Multi-SG]
传送门 题意: 有N 个局部联通的图.Harry 和Sally 轮流从图中删边,删去一条边后,不与根节点相连的部分将被移走.Sally 为先手.图是通过从基础树中加一些边得到的.所有形成的环保证不共用 ...
- POJ.3710.Christmas Game(博弈论 树上删边游戏 Multi-SG)
题目链接 \(Description\) 给定n棵"树",每棵"树"的节点可能"挂着"一个环,保证没有环相交,且与树只有一个公共点. 两人轮 ...
- 【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 S ...
- Codeforces 577E Ann and Half-Palindrome 字典树
题目链接 题意: 若一个字符串是半回文串.则满足第一位和最后一位相等, 第三位和倒数第三位相等.如此类推. 给定一个字符串s,输出s的全部子串中的半回文串字典序第k大的 字符串. good[i][j] ...
- CodeForces 706D Vasiliy's Multiset (字典树查询+贪心)
题意:最开始的时候有一个集合,集合里面只有一个元素0,现在有q次操作,操作分为3种: + x: 表示向集合中添加一个元素x - x:表示删除集合中值为x的一个元素 ? x:表示查询集合中与x异或的最大 ...
- Gaby And Addition Gym - 101466A (初学字典树)
Gaby is a little baby who loves playing with numbers. Recently she has learned how to add 2 numbers ...
- UVA5913 Dictionary Sizes(字典树)(转载)
题目大意:给出n个旧单词,要从这n个旧单词中构造新单词.构造条件是 S = Sa + Sb,其中Sa为某个旧单词的非空前缀,Sb为某个单词的非空后缀.求所有的新单词和旧单词中有多少个不同的单词. 思路 ...
- Codeforces Gym 100803G Flipping Parentheses 线段树+二分
Flipping Parentheses 题目连接: http://codeforces.com/gym/100803/attachments Description A string consist ...
- Codeforces Gym 100114 H. Milestones 离线树状数组
H. Milestones Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Descripti ...
随机推荐
- JDBC 复习4 批量执行SQL
1使用jdbc进行批量执行SQL在实际的项目开发中,有时候需要向数据库发送一批SQL语句执行,这时应避免向数据库一条条的发送执行,而应采用JDBC的批处理机制,以提升执行效率. package dbe ...
- GNU,GPL与自由软件
GNU 是 Richard Stallman(理查德·斯托曼)创建的一个项目,not unix GPL(General Public License),GNU通用公共许可证.书面上的协议 自由软件与开 ...
- Python练习_初识函数_day9
1. 1.作业 1,写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者. 2,写函数,判断用户传入的对象(字符串.列表.元组)长度是否大于5. 3,写函数,检查 ...
- vue-cli || webpack 打包的时候css里面写的背景图片的路径出错问题
.bg width 100% position fixed left 0 top 0 height 100vh z-index -1 background url('~@/assets/imgs/bg ...
- laravel 的安装与配置
1.工作环境 php 7.0+ .MySQL5.1+ 这里可以用开发环境包一键安装: 自己用的是wamp(windows)http://www.wampserver.com/en/ linux系统和m ...
- Error:Unable to start the daemon process. This problem might be caused by incorrect configuration of
我试了修改或者配置gradle文件没有成功解决的 ,所以试了这个解决方案 试了下这个是可以解决的. 变量名 _JAVA_OPTIONS 变量值 -Djava.net.preferIPv4Sta ...
- h5常见
Meta基础知识: H5页面窗口自动调整到设备宽度,并禁止用户缩放页面//一.HTML页面结构<meta name="viewport" content="widt ...
- shell 数组介绍
平时的定义a=1;b=2;c=3,变量如果多了,再一个一个定义很繁琐,并且取变量值也很累.简单的说,数组就是各种数据类型的元素按一定顺序排列的集合. 数组就是把有限个元素变量或数组用一个名字命名,然后 ...
- linux——运维基础,与常用命令
1 运维概述 1 什么是运维 服务器的运行维护 2 名词 IDC(互联网数据中心) 3 监控软件 zabbix(用的最多), nagios, cactti 4 常用的linux操作系统 1 CentO ...
- 数组和集合转化 array与list
package com.chen.test; import java.io.Serializable;import java.util.Arrays;import java.util.List;imp ...