题目链接

题目大意

给你一个长度为d(d<=1e5)的字符串,要你求有多少个子串满足这个子串不包含长度大于等于k的回文子串

题目思路

首先可以hash预处理,然后O(1)用前缀hash值和后缀hash值求一个字符串是否是回文串

其实你只要枚举每个点当作左端点,求右端点最远能到那里即可

回文串可能最多达到\(n^2\)个,但你可以思考一下其实你只要考虑长度为k和k+1的字符串即可

具体证明有点麻烦自己可以画图去考虑一下,因为长度更长的回文串必有子串长度为k或k+1

但是长度更短的回文串,影响明显是比长度更大的回文串大,即可以使得左端点固定,右端点更左

然后把所有长度为k或者k+1的回文串,先按右端点,然后按左端点排序

用双指针的思想求出每个点当作左端点,可以到达的最远右端点

代码

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#define fi first
#define se second
#define debug printf(" I am here\n");
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=1e5+5,inf=0x3f3f3f3f,mod=2017;
const double eps=1e-10;
int k;
char s[maxn];
int d;
ull base[maxn],pre[maxn],suf[maxn];
pair<int,int> pa[maxn];
void init(){
base[0]=1;
for(int i=1;i<=d;i++){
base[i]=base[i-1]*29;
}
for(int i=1;i<=d;i++){
pre[i]=pre[i-1]*29+s[i]-'a'+1;
}
for(int i=d;i>=1;i--){
suf[i]=suf[i+1]*29+s[i]-'a'+1;
}
}
ll getprehash(int l,int r){
return pre[r]-pre[l-1]*base[r-l+1];
}
ll getsufhash(int l,int r){
return suf[l]-suf[r+1]*base[r-l+1];
}
int main(){
int _;scanf("%d",&_);
while(_--){
scanf("%d %s",&k,s+1);
d=strlen(s+1);
init();
int cnt=0;
for(int i=1;i+k-1<=d;i++){
if(getprehash(i,i+k-1)==getsufhash(i,i+k-1)){
pa[++cnt]={i+k-1,i};
}
}
for(int i=1;i+k+1-1<=d;i++){
if(getprehash(i,i+k)==getsufhash(i,i+k)){
pa[++cnt]={i+k,i};
}
}
sort(pa+1,pa+1+cnt);
int now=1;
ll ans=0;
for(int i=1;i<=d;i++){
while(pa[now].se<i&&now<=cnt){
now++;
}
if(now==cnt+1){
ans+=d-i+1;
}else{
ans+=pa[now].fi-1-i+1;
}
}
printf("%lld\n",ans);
}
return 0;
}

Non Super Boring Substring 题解(hash+思维)的更多相关文章

  1. LeetCode longest substring without repeating characters 题解 Hash表

    题目 Given a string, find the length of the longest substring without repeating characters. Example 1: ...

  2. COGS 902 乐曲主题 题解 & hash入门贺

    [题意] 给定一个长为n的序列,元素都是不超过88的正整数,求序列中主题的最大长度. 所谓主题是指在序列中出现了至少两次并且不相交的子串.特别的,主题可以变调,也就是说如果一个子串全部加上或减去一个数 ...

  3. [LeetCode]Longest Palindromic Substring题解(动态规划)

    Longest Palindromic Substring: Given a string s, find the longest palindromic substring in s. You ma ...

  4. Codeforces Round #579 (Div. 3) D2. Remove the Substring (hard version) (思维,贪心)

    题意:给你一个模式串\(t\),现在要在主串\(s\)中删除多个子串,使得得到的\(s\)的子序列依然包含\(t\),问能删除的最长子串长度. 题解:首先,我们不难想到,我们可以选择\(s\)头部到最 ...

  5. CF1433A Boring Apartments 题解

    Content 我们把仅由一个或多个相同的数位组成的数字叫作"无聊的数字".我们把 \(\leqslant 10000\) 的这种数字按照以下规则排列: 首先,将仅由 \(1\) ...

  6. Find the Maximum - 题解【思维,贪心】

    题面 这是2022年ICPC昆明站的F题.在赛场上,我一开始敲了个贪心,但是出锅了,改敲树形DP,但是时间来不及了.在队友的提醒下补过了这个题,知道解法的我发现我就是个纯纯的老坛-- 原题链接在牛客网 ...

  7. [NOIP2015] 子串substring 题解

    [题目描述] 有两个仅包含小写英文字母的字符串A和B.现在要从字符串A中取出k个互不重叠的非空子串,然后把这k个子串按照其在字符串A中出现的顺序依次连接起来得到一个新的字符串,请问有多少种方案可以使得 ...

  8. BZOJ2555:SubString——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=2555 (1):在当前字符串的后面插入一个字符串 (2):询问字符串s在当前字符串中出现了几次?(作 ...

  9. 牛客练习赛16 B 漂亮的树【哈希hash/思维】

    链接:https://www.nowcoder.com/acm/contest/84/B 来源:牛客网 题目描述 街上有n棵树,标号为1...n,第i棵树的高度为ai. 定义这n棵树是漂亮的,当且仅当 ...

随机推荐

  1. CF618F Double Knapsack

    题意简化 给定两个大小为 n 的集合A,B,要求在每个集合中选出一个子集,使得两个选出来的子集元素和相等 元素范围在 1~n ,n<=1e5 题目连接 题解 考虑前缀和 令A集合的前缀和为SA, ...

  2. Luogu P5450 [THUPC2018]淘米神的树

    题意 写的很明白了,不需要解释. \(\texttt{Data Range:}1\leq n\leq 234567\) 题解 国 际 计 数 水 平 首先考虑一开始只有一个黑点的情况怎么做. 我们钦定 ...

  3. scrapy反反爬虫策略和settings配置解析

    反反爬虫相关机制 Some websites implement certain measures to prevent bots from crawling them, with varying d ...

  4. [Luogu P3119] [USACO15JAN]草鉴定Grass Cownoisseur (缩点+图上DP)

    题面 传送门:https://www.luogu.org/problemnew/show/P3119 Solution 这题显然要先把缩点做了. 然后我们就可以考虑如何处理走反向边的问题. 像我这样的 ...

  5. 自定义控件-只有横线的文本输入框(TxtLine)

    需求:在实际开发中,由于TextBox控件的背景色样式不美观,且TextBox不能直接设置背景颜色,因此需要使用自定义控件以实现如下效果 实现代码 public partial class TxtLi ...

  6. P2868 [USACO07DEC]Sightseeing Cows G

    题意描述 Sightseeing Cows G 给定一张有向图,图中每个点都有点权 \(a_i\),每条边都有边权 \(e_i\). 求图中一个环,使 "环上个点权之和" 除以 & ...

  7. C#4语法新特性

    C#4,.NET Framework 4.0, Visual Studio 2010  C#4.0新引进的语法基于.Net Framework 4.0.主要引进的语法:动态类型,命名参数.可选参数,优 ...

  8. Servlet学习笔记(二)

    目录 Servlet学习笔记(二) Request对象 1.request和response对象: 2.request对象继承体系结构: 3.什么是HttpServletRequest ? 4.Htt ...

  9. 力扣 122 买卖股票的最佳时机II

    力扣 122 买卖股票的最佳时机II 思路: 动态规划,表面上是\(O(2^n)\)的搜索空间,实际上该天的选择只与前一天的状态(是否持有股票)有关.从收益的角度来看,确实每一天的不同选择都会产生不同 ...

  10. HTML 5 <input> multiple 属性

    <form action="demo_form.asp" method="get"> Select images: <input type=& ...