当前位置: 首页 > news >正文

宜昌本地网站建设境外建网站

宜昌本地网站建设,境外建网站,安徽省建设工程信用信息网,小榄网站建设AC自动机#xff0c;就相当于是在字典树上用kmp。next数组回退的位置为最大匹配字符串在字典树上的节点位置。 在获取字典树上的next数组的时候用的是BFS每次相当与处理的一层。 下图中红线为#xff0c;可以回退的位置#xff0c;没有红线的节点回退的位置都是虚拟原点。…AC自动机就相当于是在字典树上用kmp。next数组回退的位置为最大匹配字符串在字典树上的节点位置。 在获取字典树上的next数组的时候用的是BFS每次相当与处理的一层。 下图中红线为可以回退的位置没有红线的节点回退的位置都是虚拟原点。 int n, m; int o[N]; int tr[N][26], cnt[N], idx; char str[N]; int q[N], ne[N];inline void insert() { // 正常的字典树插入板子int p 0;for(int i 0; str[i]; i ) {int t str[i] - a;if(!tr[p][t]) tr[p][t] idx;p tr[p][t];}cnt[p] ; // 记录当前字符串出现的次数 }void build() {int hh 0, tt -1;for(int i 0; i 26; i ) // 因为第二层的所有字符串长度为一next值肯定为1直接入队即可if(tr[0][i])q[ tt] tr[0][i];while(hh tt) {int t q[hh ];for(int i 0; i 26; i ) {int p tr[t][i];if(!p) tr[t][i] tr[ne[t]][i]; // 匹配失败则回退路径压缩过一次回退即可else {ne[p] tr[ne[t]][i]; // 记录ne数组顺便压缩路径q[ tt] p;}}} }inline void sovle() {idx 0;cin n;for(int i 0; i n; i ) {cin str;insert(); // 将所有字符串全都插入字典树}build(); // 获取next数组cin str;int res 0;int s 0;for(int i 0, j 0; str[i]; i ) { // 同时匹配字典树中所有的字符串int t str[i] - a;j tr[j][t];int p j;while(p cnt[p] ! 0) { // 线性匹配这里的第二个条件是一个优化只有在每个字符串只记录一次的前提下使用res cnt[p]; // 记录出现过的字符串的个数cnt[p] 0; // 因为每个字符串只计算一次所以要清空p ne[p]; // 回退}}cout res endl; }与上一题不一样的只有一小部分这题中每个字符串可重复记录所以就不能加上那个线性优化还需要记录每个字符串出现的次数即可。 int n, m; int o[N]; int tr[N][26], cnt[N], idx; string sr[200]; char str[N]; int q[N], ne[N], st[N];inline void insert(string s) {int p 0;for(int i 0; i s.size(); i ) {int t s[i] - a;if(!tr[p][t]) tr[p][t] idx;p tr[p][t];}cnt[p] ; }void build() {int hh 0, tt -1;for(int i 0; i 26; i )if(tr[0][i])q[ tt] tr[0][i];while(hh tt) {int t q[hh ];for(int i 0; i 26; i ) {int p tr[t][i];if(!p) tr[t][i] tr[ne[t]][i];else {ne[p] tr[ne[t]][i];q[ tt] p;}}} }int query(string s) { // 与插入差不多 些许操作不同int p 0;for(int i 0; i s.size(); i ) {int t s[i] - a;if(!tr[p][t]) return 0;p tr[p][t];}return st[p]; }inline void sovle() {while(cin n, n) {memset(tr, 0, sizeof tr);memset(cnt, 0, sizeof cnt);memset(ne, 0, sizeof ne);memset(st, 0, sizeof st);idx 0;for(int i 0; i n; i ) {cin sr[i];insert(sr[i]);}build();cin str;int res 0;int s 0;for(int i 0, j 0; str[i]; i ) {int t str[i] - a;j tr[j][t];int p j;while(p) {st[p] cnt[p]; // 记录该字符串出现的次数s max(st[p], s); // 因为要求出来最多出现的字符串的次数p ne[p]; // 回退}}cout s endl;for(int i 0; i n; i ) {int k query(sr[i]); // 字典树的查询操作查询st数组。if(s k) cout sr[i] endl; // 是最大的直接输出。}} }
http://wiki.neutronadmin.com/news/324987/

相关文章:

  • 邢台公司做网站多少钱网线制作ppt
  • 免费做淘宝联盟网站吉安做网站的
  • 做营销网站推广东莞网站开发技术公司
  • 外贸公司网站开发卖摄影作品的网站
  • 做网站一般多少印刷厂网站建设
  • 网约车平台app网站建设抖音推广seo
  • 免费网站平台网站推广策划方式
  • 南京网站制作域名wordpress响应慢原因
  • 广州网站制作有哪些ai网页设计教程
  • 低价网站建设哪家更好跑步机网站建设思维导图
  • 重庆网站建设网搜科技建筑公司是干什么的
  • 北京科技网站开发如何创立自己的公司
  • 网站建设 思维导图wordpress js验证码
  • 郑州网站推qq建设网站首页
  • 网站设计的主题通江县城乡建设局门户网站
  • 手机网站建设公司企业电子邮箱格式
  • 中国做健身补剂的网站个人如何注册公司流程
  • 网站建设管理调研提纲99作文网
  • 大型购物网站开发网络管理系统密码
  • 马鞍山专业网站制作做网站的标准
  • 编制网站建设策划书浙江网站建设售后保障
  • 怎么注销网站查备案企业网络建设
  • 长春网站制作推广平面广告图片
  • 网站素材站做商城网站在哪里注册营业执照
  • 衡阳seo网站推广wordpress 树状目录结构
  • 生鲜网站策划静态网站怎么优化
  • html5网站在线制作.电子商务网站建设的核心是
  • 怎么开发创建网站教程广州做网站商城的公司
  • 微商货源网站源码济南seo官网优化
  • 建设一个功能简单的网站一个做品牌零食特卖的网站