1、串(string.c/.cpp/.pas)

限时1s,内存限制256MB,20个测试点

【题目描述】

兔子们在玩字符串的游戏。首先,它们拿出了一个字符串集合S,然后它们定义一个字符串为“好”的,当且仅当它可以被分成非空的两段,其中每一段都是字符串集合S中某个字符串的前缀。

比如对于字符串集合{"abc", "bca"},字符串"abb","abab"是“好”的("abb" = "ab"+"b", abab = "ab" + "ab"),而字符串“bc”不是“好”的。

兔子们想知道,一共有多少不同的“好”的字符串。

【输入格式】

第一行一个整数n,表示字符串集合中字符串的个数

接下来每行一个字符串

【输出格式】

一个整数,表示有多少不同的“好”的字符串

【样例输入】

2

ab

ac

【样例输出】

9

【数据规模】

对于20%的数据,1 <= n <= 200

对于50%的数据,1 <= n <= 2000

对于100%的数据,1 <= n <= 10000,每个字符串非空且长度不超过30,均为小写字母组成。

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std; #ifdef WIN32
#define LL "%I64d"
#else
#define LL "%lld"
#endif
#define FRE(name) freopen(#name".in","r",stdin);freopen(#name".out","w",stdout);
#define FC fclose(stdin);fclose(stdout); typedef long long ll;
const int N=3e5+; int n,L,len,cnt,tr[N][],d[N][],num[N],fail[N],q[N];
char s[];
ll ans,f[][N];
void insert(){
int now=;
for(int i=;i<len;i++){
int t=s[i]-'a';
if(!tr[now][t]) tr[now][t]=++cnt,num[cnt]=num[now]+;
now=tr[now][t];
}
}
void AC_mach(){
int h=,t=;int p;
q[]=;fail[]=;
while(h!=t){
int now=q[++h];
for(int i=;i<;i++){
if(tr[now][i]){
p=fail[now];
while(!tr[p][i]) p=fail[p];
fail[tr[now][i]]=tr[p][i];
q[++t]=tr[now][i];
}
else{
p=fail[now];
while(!tr[p][i]) p=fail[p];
tr[now][i]=tr[p][i];
d[now][i]=;
}
}
}
}
void first(){
cnt=;ans=;
for(int i=;i<;i++) tr[][i]=;
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%s",s);
len=strlen(s);
L=max(L,len);
insert();
}
}
void solve(){
AC_mach();
for(int i=;i<=cnt;i++){
if(fail[i]!=) ans++;
for(int j=;j<;j++){
if(tr[i][j]!=&&d[i][j]){
f[][tr[i][j]]++;
}
}
}
for(int i=;i<=L;i++){
for(int j=;j<=cnt;j++){
if(f[i][j]){
ans+=f[i][j];
for(int k=;k<;k++){
if(num[tr[j][k]]>=i+){
f[i+][tr[j][k]]+=f[i][j];
}
}
}
}
}
printf(LL,ans);
}
int main(){
FRE(string)
first();
solve();
FC
return ;
}

串 2016Vijos省选集训 day3[AC自动机]的更多相关文章

  1. bzoj 1195 [HNOI2006]最短母串 bfs 状压 最短路 AC自动机

    LINK:最短母串 求母串的问题.不适合SAM. 可以先简化问题 考虑给出的n个字符串不存在包含关系. 那么 那么存在的情况 只可能有 两个字符串拼接起来能表示另外一个字符串 或者某个字符串的后缀可以 ...

  2. 兔子的晚会 2016Vijos省选集训 day1

    兔子的晚会 (xor.c/pas/cpp)============================= 很久很久之前,兔子王国里居住着一群兔子.每到新年,兔子国王和他的守卫总是去现场参加晚会来欢庆新年. ...

  3. 股神小L 2016Vijos省选集训 day1

    股神小L (stock.c/pas/cpp)============================ 小L厌倦了算法竞赛,希望到股市里一展身手.他凭借自己还行的计算机功底和可以的智商,成功建立一个模型 ...

  4. [BZOJ1195]:[HNOI2006]最短母串(AC自动机+BFS)

    题目传送门 题目描述 给定n个字符串(S1,S2,…,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2,…,Sn)都是T的子串. 输入格式 第一行是一个正整数n,表示给定的字符串的个数 ...

  5. 「刷题笔记」AC自动机

    自动AC机 Keywords Research 板子题,同luoguP3808,不过是多测. 然后多测不清空,\(MLE\)两行泪. 板子放一下 #include<bits/stdc++.h&g ...

  6. POJ 2778 DNA Sequence(AC自动机+矩阵加速)

    DNA Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9899   Accepted: 3717 Desc ...

  7. HDU3247 Resource Archiver(AC自动机+BFS+DP)

    题目,求最短的包含所有n个DNA片段且不包含任何一个病毒片段的序列. 容易用所有DNA片段和病毒片段建一个AC自动机,构造fail时处理一下各个结点后缀是DNA或者病毒的情况,然后dp[S][u]表示 ...

  8. [BZOJ 1009] [HNOI2008] GT考试 【AC自动机 + 矩阵乘法优化DP】

    题目链接:BZOJ - 1009 题目分析 题目要求求出不包含给定字符串的长度为 n 的字符串的数量. 既然这样,应该就是 KMP + DP ,用 f[i][j] 表示长度为 i ,匹配到模式串第 j ...

  9. AC自动机模板1(【洛谷3808】)

    题面 题目背景 这是一道简单的AC自动机模版题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 题目描述 给定n个模式串和1个文本串,求有多少个模式串 ...

随机推荐

  1. ES怎么进行字段添加索引,并保留原有数据

    1.先将原索引进行备份 curl -XPOST '192.168.46.163:9200/_reindex?pretty' -H 'Content-Type: application/json' -d ...

  2. Docker以及registry的入门学习安装

    一.前言 如果你是数据中心或云计算IT圈子的人,我想你一定听过Docker,关于它们的新闻从未间断过.Docker的发展历程虽然算不上太长,但是自2014年6月Docker 1.0 正式发布,但是Do ...

  3. oracle 12C SYS,SYSTEM用户的密码都忘记或是丢失

    密码 conn / as sysdba alter user system identified by Abcd1234; manual script first -->manual_scrip ...

  4. 自己动手写android图片异步载入库

    尊重他人劳动成果,转载请说明出处:http://blog.csdn.net/bingospunky/article/details/44344085 接触android有半年了.关于图片异步载入.一直 ...

  5. h5+ 管理设备信息

    Device模块管理设备信息,用于获取手机设备的相关信息,如IMEI.IMSI.型号.厂商等.通过plus.device获取设备信息管理对象. 1.属性 1.1.imei: 设备的国际移动设备身份码, ...

  6. awk、sed、cut、grep

    二.sed [可以理解为 行在线编辑工具] 作用:sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命 ...

  7. JDK与adb/android环境变量配置完整教程

    在这篇文章中.主要解决一个在Java或者Android开发中第一步须要解决的问题,那就是环境变量的配置.因为这部分在网上有非常多教程.參差不齐.我这里主要是对JDK与adb/android两者的环境变 ...

  8. flashplayer

    http://www.adobe.com/support/flashplayer/downloads.html

  9. 打造Android万能上拉下拉刷新框架--XRefreshView(三)

    转载请注明出处:http://blog.csdn.net/footballclub/ 打造Android万能上拉下拉刷新框架–XRefreshView(一) 打造Android万能上拉下拉刷新框架–X ...

  10. Java + Selenium + WebDriver八大元素定位方式

    UI自动化测试的第一步就是进行元素定位,下面给大家介绍一下Selenium + WebDriver的八大元素定位方式.现在我们就以百度搜索框为例进行元素定位,如下图: 一.By.name() Java ...