CF961F k-substring
题意:给你一个字符串(sl<=1e6),问每一个起点到1和终点到sl距离相等的子串的最长不等于串长的border。
标程:
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int can=;
const int mod=;
const int N=;
int ha[N],pow[N],n,ans[N],l,r,len,cnt;
char s[N];
int S(int x,int l)
{return ((ll)ha[x+l-]-(ll)ha[x-]*pow[l]%mod+mod)%mod;}
int main()
{
scanf("%d%s",&n,s+);
pow[]=;
for (int i=;i<=n;i++) pow[i]=(ll)pow[i-]*can%mod;
for (int i=;i<=n;i++) ha[i]=((ll)ha[i-]*can%mod+(s[i]-'a'+))%mod;
if (n&) l=r=n/+;else l=n/,r=l+;len=;
while (r<=n)
{
while (len!=-&&S(l,len)!=S(r-len+,len)||len>=r-l+) len-=;
ans[++cnt]=len;
l--,r++; len+=;
}
for (int i=cnt;i>=;i--) printf("%d ",ans[i]);
return ;
}
题解:hash+单调性
对于每一个串二分+hash?这样的答案并没有单调性。
但是(分析数据)经过有理有据的推导,发现所有这样的串的答案是具有单调性的。
对于一个串,如果在它的两边各加一个字符,那么它的border长度最多+2。
证明:
比如现在完成一个串A....B(A,B都是字符块,并且为该串的最长border)
左右各扩展:xA....By
可以证明最优情况下的匹配是xAz...gBy,不会出现xAC...DBy(C,D是长度>1的字符块)
如果存在xAC=DBy.那么提取C的最后一个字母=y,D的第一个字母=x,即xACy=xDBy。
所以AC=DB,不满足A,B是最长border。
然后就直接hash比较即可。
时间复杂度O(n)。
CF961F k-substring的更多相关文章
- hdu 5677 ztr loves substring 多重背包
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission( ...
- [HDU5677]ztr loves substring
ztr loves substring Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- HDU 5677 ztr loves substring(回文串加多重背包)
ztr loves substring Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- 年度巨献-WPF项目开发过程中WPF小知识点汇总(原创+摘抄)
WPF中Style的使用 Styel在英文中解释为”样式“,在Web开发中,css为层叠样式表,自从.net3.0推出WPF以来,WPF也有样式一说,通过设置样式,使其WPF控件外观更加美化同时减少了 ...
- 昆仑游戏[JS加密修改]
昆仑游戏:http://www.kunlun.com/index.html JS加密修改 BigTools=window.BigTools;//重点 RSAKeyPair=window.RSAKeyP ...
- BUG-FREE-For Dream
一直直到bug-free.不能错任何一点. 思路不清晰:刷两天. 做错了,刷一天. 直到bug-free.高亮,标红. 185,OA(YAMAXUN)--- (1) findFirstDuplicat ...
- C#几个经常用到的字符串截取
C#几个经常用到的字符串截取 一. 1.取字符串的前i个字符 (1)string str1=str.Substring(0,i); (2)string str1=str.Remove(i,str.Le ...
- d3-画雷达图-圆形弧线
本文转载 终极效果 源码 index.html <!DOCTYPE html> <html> <head> <meta http-equiv="Co ...
- 生成n位随机字符串
--1.借助newid() Go --创建视图(因为在函数中无法直接使用newid()) create view vnewid as select newid() N'MacoId'; go --创建 ...
- 我要崩溃了,要解出这么一段js代码背后的东西,这真是一坨啊,别被高度欺骗了,他还有宽度!!!!!试着按下方向右键
一坨js代码: function s_gi(un, pg, ss) { var c = "s.version='H.26';s.an=s_an;s.logDebug=function(m){ ...
随机推荐
- 让nginx支持patchinfo,(支持codeigniter,thinkphp,ZF等框架)
nginx 的config配置: server { listen ; server_name xxx; ....if (!-e $request_filename) { rewrite ^/(.*)$ ...
- 数据结构C++版-队列
一.概念 分类: 二.补充说明 1.<面向对象的队列设计>课程问答: 首先要明确数据结构和数据存储结构的概念. 数据结构是指数据对象之间的逻辑关系,例如二叉树,队列,栈等,而数据存储结构是 ...
- VS2010-MFC(Ribbon界面开发:为Ribbon Bar添加控件)
转自:http://www.jizhuomi.com/software/253.html 前面一节为大家简单介绍了如何创建Ribbon样式的应用程序框架,本节教程就来初步讲讲怎样为Ribbon Bar ...
- Spring源码由浅入深系列四 创建BeanFactory
继上一章refresh之后,上图描述了obtainFreshBeanFactory过程.
- mybatis 处理枚举类型
MyBatis支持持久化enum类型属性.假设t_user表中有一列gender(性别)类型为 varchar2(10),存储 MALE 或者 FEMALE 两种值.并且,User对象有一个enum类 ...
- drools原生drl规则文件的使用
在初识drools中对drl文件进行了简单的介绍.这里举个例子来具体说明下.主要是写了规则之后我们如何用java代码来run起来. drl文件内容如下: rule "ageUp12" ...
- spring MVC 转发与重定向(传参)
return "forward:index.jsp"; //转发 return "forward:user.do?method=reg5"; //转发 ret ...
- 2019-6-23-win10-uwp-开发-CSDN-访问量统计-源代码
title author date CreateTime categories win10 uwp 开发 CSDN 访问量统计 源代码 lindexi 2019-6-23 11:2:1 +0800 2 ...
- ASP.NET打开项目错误:将指定的计数添加到该信号量中会导致其超过最大计数。
1.错误如图 2.解决方案 重启IIS即可,运行-> 输入IISRESET 命令 即可重启IIS,如图
- python库之sklearn
一.安装sklearn conda install scikit-learn 参考文献 [1]整体介绍sklearn https://blog.csdn.net/u014248127/article ...