Bzoj2780: [Spoj]8093 Sevenk Love Oimaster

news/2024/7/5 2:38:32

题目

传送门

Sol

就是广义\(sam\)
然后记录下每个状态属于哪些串,开\(set\)维护
\(parent\)树上启发式合并一下就好了

# 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;IL int Input(){RG int x = 0, z = 1; RG char c = getchar();for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1;for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);return x * z;
}const int maxn(2e5 + 5);int trans[26][maxn], fa[maxn], len[maxn], size[maxn], last, tot = 1;
int l[maxn], r[maxn], n, q, t[maxn], id[maxn];
set <int> :: iterator it;
set <int> ed[maxn];
char s[maxn], qs[maxn << 1];IL void Extend(RG int c){RG int p = last, np = ++tot;len[last = np] = len[p] + 1;while(p && !trans[c][p]) trans[c][p] = np, p = fa[p];if(!p) fa[np] = 1;else{RG int q = trans[c][p];if(len[q] == len[p] + 1) fa[np] = q;else{RG int nq = ++tot;fa[nq] = fa[q], len[nq] = len[p] + 1;for(RG int i = 0; i < 26; ++i) trans[i][nq] = trans[i][q];fa[q] = fa[np] = nq;while(p && trans[c][p] == q) trans[c][p] = nq, p = fa[p];}}
}int main(){n = Input(), q = Input();for(RG int i = 1; i <= n; ++i){l[i] = r[i - 1];scanf(" %s", s + l[i]);r[i] = l[i] + strlen(s + l[i]), last = 1;for(RG int j = l[i]; j < r[i]; ++j) Extend(s[j] - 'a');}for(RG int i = 1; i <= tot; ++i) ++t[len[i]];for(RG int i = 1; i <= tot; ++i) t[i] += t[i - 1];for(RG int i = 1; i <= tot; ++i) id[t[len[i]]--] = i;for(RG int i = 1; i <= n; ++i)for(RG int j = l[i], nw = 1; j < r[i]; ++j){nw = trans[s[j] - 'a'][nw];ed[nw].insert(i);}for(RG int i = tot; i; --i){RG int p = id[i];size[p] = ed[p].size();if(size[p] > ed[fa[p]].size()) swap(ed[p], ed[fa[p]]);for(it = ed[p].begin(); it != ed[p].end(); ++it)ed[fa[p]].insert(*it);}for(RG int i = 1; i <= q; ++i){scanf(" %s", qs);RG int nw = 1, l = strlen(qs);for(RG int j = 0; j < l; ++j) nw = trans[qs[j] - 'a'][nw];printf("%d\n", size[nw]);}return 0;
}

转载于:https://www.cnblogs.com/cjoieryl/p/8940867.html


http://lihuaxi.xjx100.cn/news/237020.html

相关文章

centos 6.* 修改时间

一、查看Centos的时区和时间 1、使用date命令查看Centos时区 [rootVM_centos ~]# date -R Mon, 26 Mar 2018 19:14:03 0800 2、查看clock系统配置文件 [rootVM_centos ~]# cat /etc/sysconfig/clock ZONE"Asia/Shanghai" 3、查看系统的硬件时间&#xff0c;即BIOS时间…

R语言实现GO分析

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 我们上一期介绍了如何实现GO分析的可视化&#xff0c;运行了GOplot包自带的数据并且很畅通。然而我们如何才能获取那些可以直接输入的数据表格或者…

grep命令

1.grep命令grep命令的名称是来自于全局搜索正则表达式并打印文本行&#xff08;Global Search Regular Expression and Print out the line)的缩写。语法如下grep [options] pattern [file…]options&#xff1a;表示选项。pattern&#xff1a;要匹配的模式。file&#xff1a;表…

以太坊,EOS和其他DApps的总数达到2,432,但没有大规模采用

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 根据分散应用监测网站StateOfTheDApps&#xff0c;每月创建的新DApps数量的最高水平是2018年12月。去年最后一个月共有179个新的DApps上线。 以太…

03-Java的基础语法

一个Java程序可以认为是一系列对象的集合&#xff0c;而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。 对象&#xff1a;对象是类的一个实例&#xff0c;有状态和行为。例如&#xff0c;一条狗是一个对象&#xff0c;它的状态有&…

Spring Boot 教程(三): Spring Boot 整合Mybatis

教程简介 本项目内容为Spring Boot教程样例。目的是通过学习本系列教程&#xff0c;读者可以从0到1掌握spring boot的知识&#xff0c;并且可以运用到项目中。如您觉得该项目对您有用&#xff0c;欢迎点击收藏和点赞按钮&#xff0c;给予支持&#xff01;&#xff01;教程连载中…

以太坊和EOS DApp数量上升

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 目前&#xff0c;在最受欢迎的智能合约平台以太坊和EOS上&#xff0c;每月大约有180个新的去中心化应用程序(DApps)&#xff0c;该数量处于历史最高…

深度有趣 | 27 服饰关键点定位

简介 介绍如何使用CPM&#xff08;Convolutional Pose Machines&#xff09;实现服饰关键点定位 原理 关键点定位是一类常见而有用的任务&#xff0c;某种意义上可以理解为一种特征工程 人脸关键点定位&#xff0c;可用于人脸识别、表情识别人体骨骼关键点定位&#xff0c;可用…