bzoj4566

 后缀自动机+dp

一个串在另一个串上跑。

先对A建出自动机,然后用B在上面跑,记录当前匹配的最大长度,每次经过一个节点记录经过次数,并加上(len-Max(par))*Right,是这个状态对答案的贡献,然后把每个节点的出现次数向par树上的祖先推一遍计算贡献。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 4e5 + 5;
int n, m;
ll ans;
ll sum[N], Right[N], apr[N], f[N];
int a[N], c[N];
char s1[N], s2[N];
namespace SAM
{struct node {int val, par;int ch[26];} t[N];int last = 1, root = 1, sz = 1;int nw(int x){t[++sz].val = x;return sz;}void extend(int c){int p = last, np = nw(t[p].val + 1);while(p && !t[p].ch[c]) t[p].ch[c] = np, p = t[p].par;if(!p) t[np].par = root;else{int q = t[p].ch[c];if(t[q].val == t[p].val + 1) t[np].par = q;else{int nq = nw(t[p].val + 1);memcpy(t[nq].ch, t[q].ch, sizeof(t[q].ch));t[nq].par = t[q].par;t[q].par = t[np].par = nq;while(p && t[p].ch[c] == q) t[p].ch[c] = nq, p = t[p].par;}}Right[np] = 1;last = np;}
} using namespace SAM;
int main()
{scanf("%s%s", s1 + 1, s2 + 1);n = strlen(s1 + 1);m = strlen(s2 + 1);for(int i = 1; i <= n; ++i) extend(s1[i] - 'a');for(int i = 1; i <= sz; ++i) ++c[t[i].val];for(int i = 1; i <= sz; ++i) c[i] += c[i - 1];for(int i = 1; i <= sz; ++i) a[c[t[i].val]--] = i;    for(int i = sz; i; --i) Right[t[a[i]].par] += Right[a[i]];int u = root, step = 0;for(int i = 1; i <= m; ++i){int c = s2[i] - 'a';if(t[u].ch[c]) u = t[u].ch[c], ++step;else{while(u && !t[u].ch[c]) u = t[u].par;if(!u) u = root, step = 0;else{step = t[u].val + 1;u = t[u].ch[c];}}++apr[u];if(u != root) ans += (ll)(step - t[t[u].par].val) * Right[u];}for(int i = sz; i > 1; --i) f[t[a[i]].par] += f[a[i]] + apr[a[i]];for(int i = 2; i <= sz; ++i) ans += f[a[i]] * (ll)(t[a[i]].val - t[t[a[i]].par].val) * Right[a[i]];printf("%lld\n", ans);return 0;
}
View Code

 

转载于:https://www.cnblogs.com/19992147orz/p/7860809.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WindowsPhone7入手,实在的照片

WindowsPhone7入手&#xff0c;实在的照片 随着Silverlight在WP7上的重要体现增加&#xff0c;开发技术要先行一步&#xff0c;不管怎么样&#xff0c;先开始做这方面的准备&#xff0c;几经周折之后&#xff0c;终于搞来WindowsPhone7一部&#xff0c;手感和体验相当不错&…

JDK动态代理和CGLIB动态代理的区别

JDK动态代理和CGLIB动态代理的区别

杂项

结巴直接分词 python -m jieba -d allTrain.txt > train_contents.txt 使用redis cmd1 &#xff1a;redis-server.exe redis.windows.conf cmd2&#xff1a;redis-cli.exe -h 127.0.0.1 -p 6379 scrapy-redis src- scrapy-redis copy- scrapy project redis keys * 列出 h…

强制使用CGLIB实现动态代理@EnableAspectJAutoProxy(proxyTargetClass = true)

用EnableAspectJAutoProxy(proxyTargetClass true)注解来开启AOP功能&#xff0c;基于CGLIB实现 proxyTargetClass&#xff1a;表示动态代理实现方式&#xff0c;如果值设置true&#xff0c;表示需要代理类都基于CGLIB来实现&#xff1b;默认情况下值是设置成false表示如果原…

抗击海冰 地理信息系统来帮忙

对广大生活在沿海地区的居民来讲&#xff0c;冬天里除了要经受大风和低温的考验外&#xff0c;还多了一项担忧——海冰灾害。什么是海冰&#xff1f;狭义来讲&#xff0c;是指海水结成的冰。但广义地讲&#xff0c;海冰是浮在海上的冰的总称&#xff0c;不仅包括海水冻结的冰&a…

static_cast 和 reinterpret_cast的区别以及dynamic_cast

大多程序员在学C前都学过C&#xff0c;并且习惯于C风格&#xff08;类型&#xff09;转换。当写 C&#xff08;程序&#xff09;时&#xff0c;有时候我们在使用static_cast<>和reinterpret_cast<>时可能会有点模糊。在本 文中&#xff0c;我将说明static_cast<…

@ConditionalOnProperty的作用和用法

在spring boot中有时候需要控制配置类是否生效,可以使用ConditionalOnProperty注解来控制Configuration是否生效 步骤一&#xff1a;配置类代码 Configuration ConditionalOnProperty(prefix "application", value "enable", havingValue "true&qu…

Blog-LOGO原型

上午忙里偷闲&#xff0c;特意花了一个小时&#xff0c;制作博客LOGO&#xff0c;之前一直想给博客改头换面&#xff0c;但弄了后台之后才发现&#xff0c;自定义的图片不支持本地上传&#xff0c;为了不让这一个小时的功夫浪费&#xff0c;所以贴出这张png图。想打造独特的网页…

朴素贝叶斯和贝叶斯估计

贝叶斯定理 贝叶斯定理是关于随机事件A和B的条件概率和边缘概率的一则定理。 在参数估计中可以写成下面这样&#xff1a; 这个公式也称为逆概率公式&#xff0c;可以将后验概率转化为基于似然函数和先验概率的计算表达式&#xff0c;即 在贝叶斯定理中&#xff0c;每个名词都有…

spring的service不启动事务的配置。

为什么80%的码农都做不了架构师&#xff1f;>>> 原来是这样设置的&#xff1a; <tx:attributes> <tx:method name"*" read-only"true"/> </tx:attributes> 发现selectA调用selectB&#xff0c;如果selectB抛出Exception&…

@ConditionalOnJava注解使用

如果想让配置文件在特定的jdk版本中生效可以使用ConditionalOnJava注解 等于或大于指定的jdk版本 EQUAL_OR_NEWER 小于指定的jdk版本 OLDER_THAN 步骤一&#xff1a; 我项目用的jdk8 下面的注解表示jdk版本要大于等于jdk8才生效 ConditionalOnJava(range ConditionalOnJava…

nginx实现301(加密)跳转和200跳转

我们用nginx实现301跳转&#xff0c;下面我们先讲一下实现的大概思想&#xff0c;首先我们用yum或者编译安装nginx&#xff0c;然后配置nginx的主配置文件的子文件&#xff0c;&#xff08;在配置子文件的时候可以把默认文件先注释掉&#xff09;配置好子文件之后重启nginx服务…

ASP.NET控件开发基础5

上一篇简单的讲了从WebControl继承的控件(好象我讲的都是简单的,嘿嘿).本次讲的更简单,主题是是属性,只当分享经验,希望对大家有帮助我们根据属性的不同表现形式,把其区分为简单属性和复杂属性下面来看下属性的表现形式简单属性表现形式如下,大家都很熟悉 <asp:TextBox ID&q…

项目Alpha冲刺Day4

一、会议照片 二、项目进展 1.今日安排 学习熟悉前台框架且搭建前台页面框架。 2.问题困难 使用了前端的构建工具webpack&#xff0c;困难在于怎么使用gradle结合它连同后台框架中的配置一起打包&#xff0c;因为本身都才刚接触这两者。本来希望每个人下好项目能配置尽量少的东…

log4j:ERROR Could not find value for key log4j.appender.stdout.layout

Connected to the target VM, address: 127.0.0.1:65401, transport: socket log4j:ERROR Could not find value for key log4j.appender.stdout.layout 此log4j:ERROR Could not find value for key log4j.appender.XXXX类型报错与log4j.properties文件写法有关系 处理方法&a…

第十二周学习笔记

先检查有没有对应类型的接口&#xff0c;没有必须先到网上下载&#xff0c;重新开启SQL SEVER即可 64位以上的系统必须用 Microsoft Ace Oledb 12.0 版本的 要选对数据库 没有查询到表格的可以建立表格 用INSERT INTO 语句可以插入数据 ----------删除 删除格式代码&#xff0c…