「BJWC2018」Border 的四种求法】的更多相关文章

「BJWC2018」Border 的四种求法 题目描述 给一个小写字母字符串 \(S\) ,\(q\) 次询问每次给出 \(l,r\) ,求 \(s[l..r]\) 的 Border . \(1 \leq n,q \leq 10^5\) 解题思路 : 求 Border 等价于在 \([l, r)\) 中找一个点 \(i\) ,满足 \(lcs(i, r) \geq i -l + 1\) ,且 \(i\) 最大. 考虑把问题丢到 \(\text{Sam}\) 上,那么满足的条件变为 \(len(l…
题目描述 给一个小写字母字符串 S ,q 次询问每次给出 l,r ,求 s[l..r] 的 Border . Border: 对于给定的串 s ,最大的 i 使得 s[1..i] = s[|s|-i+1..|s|], |s| 为 s 的长度. 题解 这题的描述很短,给人一种很可做的假象. 暴力1:每次对区间lr做一次KMP,求出border数组,复杂度nq. 暴力2:构建后缀自动机,用线段树合并维护出right集合考虑到两个串的最长后缀为他们在parent树上的LCA的len,所以我们可以在pa…
题目传送门 传送门 题目大意 区间border. 照着金策讲稿做. Code /** * luogu * Problem#P4482 * Accepted * Time: 8264ms * Memory: 37924k */ #include <bits/stdc++.h> using namespace std; typedef bool boolean; template <typename T> void pfill(T* pst, const T* ped, T val)…
description luogu 给一个小写字母字符串\(S\),\(q\)次询问每次给出\(l,r\),求\(s[l..r]\)的\(Border\). solution 我们考虑转化题面:给定\(l,r\),求满足\(lcs(i,r)\ge i-l+1\)的最大的\(i\). 对于\(lcs(i,r)\),考虑对\(S\)构建\(SAM\),那么我们知道\(lcs\)的可能取值就是从后缀\(r\)所代表的节点沿着\(fail\)树到根节点的路径上节点的\(len\)的取值. 那么我们得到了…
luogu 对于每个询问从大到小枚举长度,哈希判断是否合法,AC 假的(指数据) 考虑发掘border的限制条件,如果一个border的前缀部分的末尾位置位置\(x(l\le x < r)\)满足\(s[l,x]=s[r-(x-l+1)+1,r]\),那么要满足最长公共后缀\(lcs(x,r)\ge x-l+1\) 而\(lcs(x,y)\)是\(x,y\)两个点在串\(S\)的sam的\(parent\)树上的lca的\(length\),所以先把\(S\)的sam建出来,那么询问\((l,r…
原文链接https://www.cnblogs.com/zhouzhendong/p/LuoguP4482.html 题意 给定一个字符串 S,有 q 次询问,每次给定两个数 L,R ,求 S[L...R] 的最长前后缀. $$q,|S|\leq 2 \times 10 ^ 5$$ 题解 真是一道有趣的字符串题. 首先我们给 S 建出 SAM ,并用线段树合并预处理出每一个节点的 Right 集合. 我们要做的是找到最大的 $p$ 满足 $p<R, S[L...p] = S[R-p+L...R]…
题目链接 题意 区间 boder \(n,q\leq 2*10^5\) Sol (暴力哈希/SA可以水过) 字符串区间询问问题,考虑用 \(SAM\) 解决. boder相当于是询问区间 \([l,r]\) 内满足 \(lcs(i,r)>=i-l+1\) 的最大的 \(i\) 那么首先可以得到一个暴力做法,我们定位 \([1,r]\) 这个串的节点,那么相当于要询问的就是它的祖先.每一个点可以直接把它的 \(len\) 值视为 \(lcs(i,r)\).这样的话用线段树合并维护出endpos后一…
这题我写了一天后交了一发就过了我好兴奋啊啊啊啊啊啊 题目 洛谷 4482 分析 这题明明可以在线做的,为什么我见到的所有题解都是离线啊 -- 什么时候有机会出一个在线版本坑人. 题目的要求可以转化为求出一个最大的 \(i(i<r)\) 满足 \(i-\mathrm{lcs}(i,r)<l\) ,其中 \(\mathrm{lcs}(i,r)\) 表示 前缀 \(i\) 和 前缀 \(r\) 的最长公共后缀.答案就是 \(i-l+1\) . 在 SAM 上考虑这个问题.fa 树.max.\(R_u…
刷了n次用了奇淫技巧才拿到rk1,亥 这道题是网络流二十四题中「餐巾计划问题」的加强版. 于是怀着试一试的心情用费用流交了一发: 哇塞,过了9个点!(强烈谴责出题人用*造数据 下面是费用流解法简述: 那么我们把每一天拆为早上和晚上两个点,设为 \(day_i,night_i\) . 首先可以人为地规定一点:对一块餐巾,我们要么在其脏了之后立即送洗,要么买一块新干净餐巾来代替它. 然后对于每一个操作,我们可以如下连边: 对于买新干净餐巾:我们可以视作从源点买餐巾,从 \(s\) 向 \(day_i…
「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 不论新老朋友 我相信您都可以 从中获益.如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力! Part 1. 数据类型 假设您遇到了以下撕碎的纸片,您觉得会是什么意思? 在不了解上下文的情况下,很难说出 MIX 的含义,它可能是罗马数字…