博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【计蒜客】是男人就过 8 题--Pony.AI 题 A. A String Game 后缀自动机+SG函数
阅读量:6339 次
发布时间:2019-06-22

本文共 1759 字,大约阅读时间需要 5 分钟。

【题目】

【题意】给定目标串S和n个子串Ti,Alice和Bob轮流选择一个子串操作,必须且只能在子串末尾添加一个字符使得新串也是S的子串,不能操作即输,求胜利者。|S|<=10^5,n<=100。多组数据,保证Σ|S|<=3*10^7。

【算法】后缀自动机+博弈论SG函数

【题解】对S建SAM,每次子串操作相当于沿SAM的实边走,所以可以对SAM进行DAG上的sg函数计算,最后多个子串的sg值的异或和就是答案,非0先手必胜。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long#define lowbit(x) x&-xusing namespace std;int read(){ char c;int s=0,t=1; while(!isdigit(c=getchar()))if(c=='-')t=-1; do{s=s*10+c-'0';}while(isdigit(c=getchar())); return s*t;}int min(int a,int b){ return a
0?x:-x;}//int MO(int x){return x>=MOD?x-MOD:x;}//void insert(int u,int v){tot++;e[tot].v=v;e[tot].from=first[u];first[u]=tot;}/*------------------------------------------------------------*/const int inf=0x3f3f3f3f,maxn=100010;int n,last,root,size,sg[maxn*2];struct st{ int len,fa,t[30];}t[maxn*2];void insert(int c){ int np=++size; for(int i=0;i<26;i++)t[np].t[i]=0; t[np].len=t[last].len+1; int x=last; while(x&&!t[x].t[c])t[x].t[c]=np,x=t[x].fa; last=np; if(!x)t[np].fa=root;else{ int y=t[x].t[c]; if(t[y].len==t[x].len+1)t[np].fa=y;else{ int nq=++size; t[nq]=t[y]; t[nq].len=t[x].len+1; t[nq].fa=t[y].fa;t[y].fa=t[np].fa=nq; while(x&&t[x].t[c]==y)t[x].t[c]=nq,x=t[x].fa; } }}void dfs(int x){ bool vis[28];// if(~sg[x])return; memset(vis,0,sizeof(vis)); for(int c=0;c<26;c++)if(t[x].t[c]){ dfs(t[x].t[c]); vis[sg[t[x].t[c]]]=1; } for(int i=0;i<=26;i++)if(!vis[i]){sg[x]=i;break;}}char s[maxn];int main(){ while(~scanf("%s",s)){ int m=strlen(s); last=size=root=1; for(int c=0;c<26;c++)t[1].t[c]=0; for(int i=0;i
View Code

 

这破题说明我是八分之一男人,哈哈哈嗝。

。。。

转载于:https://www.cnblogs.com/onioncyc/p/8666830.html

你可能感兴趣的文章
多线程基础(三)NSThread基础
查看>>
PHP的学习--Traits新特性
查看>>
ubuntu下,py2,py3共存,/usr/bin/python: No module named virtualenvwrapper错误解决方法
查看>>
Ext.form.field.Number numberfield
查看>>
Linux文件夹分析
查看>>
解决部分月份绩效无法显示的问题:timestamp\union al\autocommit等的用法
查看>>
nginx 域名跳转 Nginx跳转自动到带www域名规则配置、nginx多域名向主域名跳转
查看>>
man openstack >>1.txt
查看>>
linux几大服务器版本大比拼
查看>>
在BT5系统中安装postgresQL
查看>>
【Magedu】Week01
查看>>
写给MongoDB开发者的50条建议Tip25
查看>>
为什么要让带宽制约云计算发展
查看>>
2012-8-5
查看>>
VS中ProjectDir的值以及$(ProjectDir)../的含义
查看>>
我的友情链接
查看>>
PHP实现排序算法
查看>>
Business Contact Mnanager for Outlook2010
查看>>
9种用户体验设计的状态是必须知道的(五)
查看>>
解决WIN7下组播问题
查看>>