题目链接:

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;
}

  

最新文章

  1. android笔记:获取View组件宽度以及ViewTreeObserver
  2. 权重轮询调度算法(WeightedRound-RobinScheduling)-Java实现2
  3. React Native 网络请求
  4. Register DLL Assembly Gacutil.exe(全局程序集缓存工具)
  5. Apple移动设备处理器指令集 armv6、armv7、armv7s及arm64
  6. OSGi在淘宝内部的使用
  7. leetcode第四题:Median of Two Sorted Arrays (java)
  8. c 连接数据库 mysql
  9. MySQL之终端(Terminal)管理MySQL(转)
  10. 【动态规划】leetcode - Maximal Square
  11. 解决mysql漏洞 Oracle MySQL Server远程安全漏洞(CVE-2015-0411)
  12. 网页分享到facebook
  13. [Swift]LeetCode410. 分割数组的最大值 | Split Array Largest Sum
  14. 使用postman测试dubbo服务层的方法
  15. oday获取系统最高权限的代码
  16. HDU - 3002 King of Destruction(最小割)
  17. myeclipse修改了安装目录名字打不开解决方法
  18. 在使用Idea配置jQuery的问题
  19. sublime text2快捷键
  20. Unity3D实践系列06,球体撞击物体游戏

热门文章

  1. JavaScript知识点:分支结构(if、switch)+算法例题
  2. swith-case 日历
  3. linux串口命令
  4. leetcode-111. 二叉树最小深度 &#183; Tree + 递归
  5. java中的io流总结(一)
  6. 开发神技能 | Python Mock 的入门
  7. 大数据之路week04--day05(java 正则表达式)
  8. Sql中的主键和外键
  9. java-集合处理数据的效率差异
  10. [Visual Studio] 一些VS2013的使用技巧