CodeForces 1098F. Ж-function

题目简述:给定字符串$s[1 \dots n](n \leq 2 \times 10^5)$,以及$Q \leq 2 \times 10^5$个询问,每个询问有两个参数$1 \leq l \leq r \leq n$,求

$$ \sum_{i=l}^r \operatorname{lcp}(s[l \dots r], s[i \dots r]), $$

其中$\operatorname{lcp}(s, t)$表示字符串$s$和$t$的最长公共前缀(Longest Common Prefix)的长度。

解:

code

模型转化

$$ \sum_{i=l}^r \operatorname{lcp}(s[l \dots r], s[i \dots r]) = \sum_{i=l}^r \min\{\operatorname{lcp}(s[l \dots n], s[i \dots n]), r-l+1\} $$

后缀自动机(Suffix Automaton)与后缀树(Suffix Tree)

后缀自动机学习资料:

1. CSDN

2. SAISUMIT

3. CodeForces

后缀树学习资料:

1. cnblogs

为了方便起见,我们在这里再次简要申明后缀自动机和后缀树的定义,以防止混淆各种不同定义的细微差别。

一个(确定)有限状态自动机((Deterministic) Finite-State Automaton)$A = (Q, \Sigma, \delta, q_0, F)$,其中

  ·$Q$是一个有限的状态集合。

  ·$\Sigma$是一个有限的字符集。

  ·$\delta: Q \times \Sigma \to Q$是转移函数。若$\delta(p,a)=q$,则可看作是$p$至$q$有一条权值为$a$的边。

  ·$q_0 \in Q$是初始状态。

  ·$F \subseteq Q$是接受状态的集合。

一个非空字符串$s$的后缀自动机$\text{SA}(s)$是一个有限状态自动机$A = (Q, \Sigma, \delta, q_0, F)$,其中

  ·$Q$和$\delta$构成了一个有向无环图(Directed Acyclic Graph)。

  ·$F = \{ f_1, f_2, \dots, f_{|s|} \}$,其中$f_{k}$对应后缀$s[k\dots |s|]$。若对$q \in Q$,定义$ \text{str}(q) = \{ t \in \Sigma^*: \delta(q_0, t) = q \} $,则$\text{str}(f_k) = \{ s[k \dots |s|] \}$。

原文地址:https://www.cnblogs.com/TinyWong/p/10363110.html

时间: 2024-09-29 07:52:08

CodeForces 1098F. Ж-function的相关文章

Codeforces 429D Tricky Function 最近点对

题目链接:点击打开链接 暴力出奇迹. 正解应该是最近点对,以i点为x轴,sum[i](前缀和)为y轴,求任意两点间的距离. 先来个科学的暴力代码: #include<stdio.h> #include<string.h> #include<vector> #include<algorithm> #include<iostream> #include<queue> using namespace std; #define N 10005

Codeforces 429D Tricky Function(平面最近点对)

题目链接  Tricky Function $f(i, j) = (i - j)^{2} + (s[i] - s[j])^{2}$ 把$(i, s[i])$塞到平面直角坐标系里,于是转化成了平面最近点对问题. #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i) #define dec(i, a, b) for (int i(a); i >=

Codeforces 429D Tricky Function 近期点对

题目链接:点击打开链接 暴力出奇迹. 正解应该是近期点对.以i点为x轴,sum[i](前缀和)为y轴,求随意两点间的距离. 先来个科学的暴力代码: #include<stdio.h> #include<string.h> #include<vector> #include<algorithm> #include<iostream> #include<queue> using namespace std; #define N 10005

codeforces 429D Tricky Function

这道就是相当于i表示x轴,sum[i]表示y轴,sum[i]表示前i个数的和 那么计算最小两点之间的距离 所谓的就是看了题解恍然大悟的题,就是算的时候先算的j->i的距离, #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; typedef long long ll; #define N 11111 ll a

@codeforces - [email&#160;protected] Function

目录 @[email protected] @[email protected] @accepted [email protected] @[email protected] @[email protected] 已知 a 序列,并给定以下关系: \[\begin{cases} f(1, j) = a_j & (1 \le j \le n) \f(i, j) = \min\{f(i - 1, j), f(i - 1, j - 1)\} + a_j & (2 \le i \le j \le

通过百度echarts实现数据图表展示功能

现在我们在工作中,在开发中都会或多或少的用到图表统计数据显示给用户.通过图表可以很直观的,直接的将数据呈现出来.这里我就介绍说一下利用百度开源的echarts图表技术实现的具体功能. 1.对于不太理解echarts是个怎样技术的开发者来说,可以到echarts官网进行学习了解,官网有详细的API文档和实例供大家参考学习. 2.以下是我在工作中实现整理出来的实例源码: 公用的支持js文件 echarts.js.echarts.min.js,还有其他的图表需要支持的js文件也可以到官网下载 echa

帮同学做的大一大作业:《我的家乡—郑州》

---恢复内容开始--- 最近在上海上学的一个高中同学让我帮忙,帮她做她们的计算机课程大作业. 由于关系不错我也不好意思拒绝就帮忙做了,因为这个学期刚刚开始接触HTML5和css,所以制作过程中有很多不懂的,而且由于HTML5是选修课,一星期只有一节,所以做这个花费了比较多的时间,这个网站是我制作的第一个网站,比较有纪念意义,所以发在博客上,作为纪念. 通过去做这个作业,我了解到很多课上学不到的东西.因为没有美工,从头到尾,都是我一个人在臆想,刚开始的时候,根本无从下手,我去参考别人做的家乡网站

Codeforces Gym 100187M M. Heaviside Function two pointer

M. Heaviside Function Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/problem/M Description Heaviside function is defined as the piecewise constant function whose value is zero for negative argument and one for non-negat

Codeforces Round #245 (Div. 1)——Tricky Function

l and dished out an assist in the Blackhawks' 5-3 win over the Nashville Predators.Shaw said just playing with the Blackhawks was enough motivation for him."Positive, I'm playing in the NHL," Shaw said after Sunday's win. "What can't you be