zoukankan      html  css  js  c++  java
  • Bzoj3172: [Tjoi2013]单词

    Sol

    AC自动机模板题

    # include <bits/stdc++.h>
    # define RG register
    # define IL inline
    # define Fill(a, b) memset(a, b, sizeof(a))
    using namespace std;
    typedef long long ll;
    const int _(1e6 + 10);
    
    int n, fail[_], val[_], ch[26][_], tot, ans[210], len, fa[210], Q[_], head = 1, tail;
    char s[_];
    
    IL void Insert(RG int id){
    	RG int x = 0;
    	for(RG int i = 0; i < len; ++i){
    		RG int c = s[i] - 'a';
    		if(!ch[c][x]) ch[c][x] = ++tot;
    		++val[x = ch[c][x]];
    	}
    	fa[id] = x;
    }
    
    IL void Getfail(){
    	for(RG int i = 0; i < 26; ++i) if(ch[i][0]) Q[++tail] = ch[i][0];
    	while(head <= tail){
    		RG int u = Q[head++];
    		for(RG int i = 0; i < 26; ++i)
    			if(ch[i][u]) fail[ch[i][u]] = ch[i][fail[u]], Q[++tail] = ch[i][u];
    			else ch[i][u] = ch[i][fail[u]];
    	}
    }
    
    
    int main(RG int argc, RG char *argv[]){
    	scanf("%d", &n);
    	for(RG int i = 1; i <= n; ++i) scanf(" %s", s), len = strlen(s), Insert(i);
    	Getfail();
    	for(RG int i = tail; i; --i) val[fail[Q[i]]] += val[Q[i]];
    	for(RG int i = 1; i <= n; ++i) printf("%d
    ", val[fa[i]]);
    	return 0;
    }
    
    
  • 相关阅读:
    RabbitMQ安装
    Redis安装
    spring boot 与 vue 配置 https
    JAVA 注解
    Java 获取两个日期之间的所有日期
    数组排序
    el-table表格高度自适应
    Windows使用Nexus搭建Maven私服
    SpringCloud 整合 Python
    SpringCloud 整合 Python
  • 原文地址:https://www.cnblogs.com/cjoieryl/p/8251790.html
Copyright © 2011-2022 走看看