<题目链接>

经典ACAM。


注意单词之间添加字符,以及对重复单词的处理。

#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int MAXN=210,MAXM=1000010,MAXL=1000010;
char str[MAXL],p[MAXN+MAXL];
int n;
class ACAM
{
public:
ACAM(void)
{
cnt=0;
memset(mp,0,sizeof mp);
memset(ans,0,sizeof ans);
memset(s,0,sizeof s);
}
void Insert(char *str,int k)
{
int x=0;
for(int i=0,t;str[i];++i)
{
if(!s[x].c[t=num(str[i])])
s[x].c[t]=++cnt;
x=s[x].c[t];
}
if(!s[x].index)
s[x].index=k;
mp[k]=s[x].index;
}
void GetFail(void)
{
queue<int> q;
for(int i=0,t;i<26;++i)
if(t=s[0].c[i])
q.push(t);
while(!q.empty())
{
int x=q.front();
q.pop();
for(int i=0,t,f;i<26;++i)
if(t=s[x].c[i])
{
f=s[t].fail=s[s[x].fail].c[i];
s[t].lst=s[f].index?f:s[f].lst;
q.push(t);
}
else
s[x].c[i]=s[s[x].fail].c[i];
}
}
void Search(char *p)
{
int x=0;
for(int i=0;p[i];++i)
{
if(p[i]==' ')
{
x=0;
continue;
}
if(s[x=s[x].c[num(p[i])]].index)
++ans[s[x].index];
for(int j=s[x].lst;j;j=s[j].lst)
++ans[s[j].index];
}
for(int i=1;i<=n;++i)
printf("%d\n",ans[mp[i]]);
}
private:
int cnt,mp[MAXN],ans[MAXN];
struct node
{
int index,fail,lst,c[26];
}s[MAXM];
int num(char c)
{
return c-'a';
}
}AC;
int main(int argc,char *argv[])
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%s",str);
AC.Insert(str,i);
strcat(p,str);
strcat(p," ");
}
AC.GetFail();
AC.Search(p);
return 0;
}

谢谢阅读。

[Luogu 3966] TJOI 2013 单词的更多相关文章

  1. [TJOI 2013]单词

    Description 题库链接 给出一篇文章的所有单词,询问每个单词出现的次数. 单词总长 \(\leq 10^6\) Solution 算是 \(AC\) 自动机的板子,注意拼成文章的时候要在单词 ...

  2. bzoj-3170 3170: [Tjoi 2013]松鼠聚会(计算几何)

    题目链接: 3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec  Memory Limit: 128 MB Description 有N个小松鼠,它们的家用一个点x,y表 ...

  3. BZOJ3170: [Tjoi 2013]松鼠聚会

    3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 531  Solved: 249[Submit][Statu ...

  4. BZOJ 3170: [Tjoi 2013]松鼠聚会 切比雪夫距离

    3170: [Tjoi 2013]松鼠聚会 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  5. BZOJ 3170: [Tjoi 2013]松鼠聚会( sort )

    题目的距离为max(|x1-x2|, |y1-y2|) (切比雪夫距离). 切比雪夫距离(x, y)->曼哈顿距离((x+y)/2, (x-y)/2) (曼哈顿(x, y)->切比雪夫(x ...

  6. [Tjoi 2013]松鼠聚会

    3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1318  Solved: 664[Submit][Stat ...

  7. Luogu 1979 NOIP 2013 华容道(搜索,最短路径)

    Luogu 1979 NOIP 2013 华容道(搜索,最短路径) Description 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面 ...

  8. Bzoj 3170[Tjoi 2013]松鼠聚会 曼哈顿距离与切比雪夫距离

    3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1318  Solved: 664[Submit][Stat ...

  9. [BZOJ 3173] [TJOI 2013] 最长上升子序列(fhq treap)

    [BZOJ 3173] [TJOI 2013] 最长上升子序列(fhq treap) 题面 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数 ...

随机推荐

  1. Sublime Text 插件推荐——for web developers

    楼主向高大上的: web front-end development engineer (好吧,google就是这样翻译的 ^_^)们推荐 ST 插件,在此抛砖引玉: NO.1 :Emmet (原名: ...

  2. eg_2

    2. 编写一个程序,输出在一个字符串中,指定的字符串出现的次数 第一种方法: public class Test { public static void main(String[] args) { ...

  3. python学习笔记08:安装django

    linux环境安装django: sudo pip install django windows环境安装django: pip install django 验证django是否安装: python ...

  4. ZOJ 1457 E-Prime Ring Problem

    https://vjudge.net/contest/67836#problem/E A ring is compose of n circles as shown in diagram. Put n ...

  5. 安装django 提示ImportError: No module named setuptools

    安装django前要先安装setuptools 先安装一些必要的包,否则会报错:Python build finished, but the necessary bits to build these ...

  6. 判断集合不为空Java

    list.size>0判断集合size是否大于0 list.isEmpty()判断集合是否为空,返回布尔值

  7. [计算机网络] C++模拟telnet登陆SMTP服务发送邮件过程

    在百度文库中的<使用telnet协议收发邮件>,我们可以很清楚地看到如何通过telnet来进行发送邮件,下面是一些需要用到的命令,通过以下命令可以很容易实现邮件发送功能.为了更好地理解其中 ...

  8. C结构体【转】

    “结构”是一种构造类型,它是由若干“成员”组成的.每一个成员可以是一个基本数据类型或者又是一个构造类型.结构既是一种“构造”而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它.如同在说明和 ...

  9. Runtime之IMP指针,isa指针

    要了解 isa 指针先了解下类的定义在xcode中用快捷键Shift+Cmd+O 搜索objc.h 能看到类的定义:了解 Paste_Image.png 可以看出:objc_object:Object ...

  10. 【bzoj3886】[Usaco2015 Jan]Moovie Mooving 状态压缩dp+二分

    题目描述 Bessie is out at the movies. Being mischievous as always, she has decided to hide from Farmer J ...