[atARC087E]Prefix-free Game
建一棵trie树,考虑一个串,相当于限制了其子树内部+其到根的链
如果将所有点补全,那么这个问题可以看作每一个极浅(子树内没有其他满足条件)的到根路径以及子树内部没有其他结束点的子树的子问题
对于多个子问题博弈,很明显去求sg,由于是一颗满二叉树,因此只与深度$l$(指该子树深度,与全局的$L$无关)有关,以下记为$f_{l}$
初始$f_{0}=1$(虽然根本身是个空串,但这个点必然不是全局trie树的根,换言之其到该根的部分仍然存在),然后$f_{i}=mex_{j=0}^{i-1}(\bigoplus_{k=j}^{i-1}f_{k})$,复杂度为$o(L^{2})$,由于$L$过大,因此要优化
观察可得$f_{n}$为$n$二进制下末尾连续1数量的2的幂次(也可以表示为$2^{lowbit(n+1)}$),证明归纳即可

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 100005
4 #define ll long long
5 map<int,bool>mat;
6 int V,n,ans,vis[N],ch[N][2];
7 ll l;
8 char s[N];
9 void add(char *s,int l){
10 int k=1;
11 for(int i=0;i<l;i++){
12 if (!ch[k][s[i]-'0'])ch[k][s[i]-'0']=++V;
13 k=ch[k][s[i]-'0'];
14 }
15 vis[k]=1;
16 }
17 void dfs(int k,ll l){
18 if (vis[k])return;
19 if ((!k)||(!l)){
20 int s=0;
21 while (l&1){
22 s++;
23 l>>=1;
24 }
25 mat[s]^=1;
26 if (mat[s])ans++;
27 else ans--;
28 return;
29 }
30 dfs(ch[k][0],l-1);
31 dfs(ch[k][1],l-1);
32 }
33 int main(){
34 scanf("%d%lld",&n,&l);
35 V=1;
36 for(int i=1;i<=n;i++){
37 scanf("%s",s);
38 add(s,strlen(s));
39 }
40 dfs(1,l);
41 if (ans)printf("Alice");
42 else printf("Bob");
43 }
[atARC087E]Prefix-free Game的更多相关文章
- Spring配置文件标签报错:The prefix "XXX" for element "XXX:XXX" is not bound. .
例如:The prefix "context" for element "context:annotation-config" is not bound. 这种 ...
- [LeetCode] Implement Trie (Prefix Tree) 实现字典树(前缀树)
Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...
- [LeetCode] Longest Common Prefix 最长共同前缀
Write a function to find the longest common prefix string amongst an array of strings. 这道题让我们求一系列字符串 ...
- 1014: [JSOI2008]火星人prefix
1014: [JSOI2008]火星人prefix Time Limit: 10 Sec Memory Limit: 162 MB Description 火星人最近研究了一种操作:求一个字串两个后缀 ...
- [BZOJ1014][JSOI2008]火星人prefix
[BZOJ1014][JSOI2008]火星人prefix 试题描述 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:madamimadam,我们将这个字符串的各个字 ...
- No plugin found for prefix 'mybatis-generator' in the current project
http://blog.csdn.net/you23hai45/article/details/50792430 1.错误描述 F:\workspaces\Mybatis>mvn mybatis ...
- 【leetcode】Longest Common Prefix
题目简述: Write a function to find the longest common prefix string amongst an array of strings. 解题思路: c ...
- LintCode 78:Longest Common Prefix
public class Solution { /** * @param strs: A list of strings * @return: The longest common prefix ...
- [LintCode] Longest Common Prefix 最长共同前缀
Given k strings, find the longest common prefix (LCP). Have you met this question in a real intervie ...
- BZOJ 1014: [JSOI2008]火星人prefix [splay 二分+hash] 【未完】
1014: [JSOI2008]火星人prefix Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6243 Solved: 2007[Submit] ...
随机推荐
- css新增属性之边框
css3新增属性 边框属性 背景属性 文字属性 颜色属性 边框属性 属性 说明 border-radius 设置边框圆角 border-image 设置图像边框 border-shadow 设置边框阴 ...
- VS 调试 提示 Lc.exe已退出 代码为-1问题解决方法
找到程序项目下Properties文件夹licenses.licx文件,然后右键选择删除就可以了,调试运行正常了 https://jingyan.baidu.com/article/b24f6c822 ...
- k8s学习笔记(2)- Rancher2.x部署springboot应用及高可用、扩容
前言:上一篇介绍基于k3s环境,使用kubectl部署springboot简单项目应用,本篇介绍基于rancher2.x部署应用程序 1.上篇已部署一个springboot应用,我们可以通过ranch ...
- 【UE4 C++】碰撞检测与事件绑定
概念 碰撞对象通道与预设 默认提供碰撞对象类型,如 WorldStatic.WorldDynamic等.允许用户自定义 默认提供碰撞预设,如 NoCollision.BloackAll.Overlap ...
- 封装一个的toast弹出框(vue项目)
逆风的方向,更适合飞翔 实现效果 实现步骤 先写出一个toast组件 // Toast.vue <template> <div id="toast" :class ...
- 机器学习:SVM
SVM 前言:支持向量机(Support Vector Machine, SVM),作为最富盛名的机器学习算法之一,其本身是一个二元分类算法,为了更好的了解SVM,首先需要一些前提知识,例如:梯度下降 ...
- 【二食堂】Beta - Scrum Meeting 6
Scrum Meeting 6 例会时间:5.19 18:30~18:50 进度情况 组员 当前进度 今日任务 李健 1. 实体标注的优化基本已经实现,后端有bug,还没有进行接口调用 issue 2 ...
- 笔记本加装SSD并装系统
1,首先了解笔记本配置信息 一般加装SSD都是120~256左右,并使用原有的机械硬盘:首先确定加装位置:1,是否支持M.2接口:假如支持,可以直接购买,拆机装上:我的笔记本不支持:所以考虑2,光驱的 ...
- 关于把RTL工程代码封装成IP时对define宏定义参数的处理
在把RTL工程封装成IP的时候,如果工程中的代码中含有global include中定义的参数,则vivado不支持该参数文件的封装.出现IP_FLOW 19-4646的错误代码,解决方法: 1.在用 ...
- 字符串匹配 ?kmp : hash
给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字. 模板串P在模式串S中多次作为子串出现. 求出模板串P在模式串S中所有出现的位置的起始下标. 输入格式 第一行输入整 ...