[bzoj3670][2014湖北省队互测week2]似乎在梦中见过的样子
Description
已知一个字符串S,求它有多少个形如A+B+A的子串(len(A)>=k,len(B)>=1 )。
Input
第一行一个字符串,第二行一个数 k。
Output
仅一行一个数,表示满足条件的子串数。
Sample Input
aaaaa
1
Sample Output
6
HINT
对于 100%的数据:n<=15000 , k<=100,且字符集为所有小写字母。
Solution
这道题时限15s,明显O(n2)可以过。那么如果枚举某一端形成新的子串,用kmp的思想去处理的话,就可以过了。
那具体要如何处理这个子串呢?假设我们枚举左端点l,s长度为r,则形成的新子串为s[l...r]。
由题意我们可以知道,如果s[l...i]=s[j-i+l...j]且(i-l+1)>=k且l-1+(i-l+1)×2+1<=j,那么s[l...j]就是一个满足条件的子串,那么这道题就明显和Noi2014动物园很像了。
如果直接暴力用next[]找满足条件的前缀,实现会变成O(n3)。
所以这个地方得继续用kmp的思想:当发现现在的i不满足条件时,可以用next[]向前寻找满足条件的i。
这样的话,每次都是从满足(j-1)的条件的i开始寻找,于是时间复杂度就压到了O(n2)。
#include<set>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<cstdio>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define N 15002
using namespace std;
int next[N],n,k,ans;
char a[N];
inline void get_next(char a[]){
for(int i=,j=;a[i];i++){
while(j&&a[i]!=a[j+]) j=next[j];
j+=(a[i]==a[j+]);
next[i]=j;
}
for(int i=,j=;a[i];i++){
while(j&&a[i]!=a[j+]) j=next[j];
j+=(a[i]==a[j+]);
while(j&&j*>=i) j=next[j];
if(j>=k) ans++;
}
}
inline void init(){
scanf("%s%d",a+,&k);
n=strlen(a+);n-=(k<<);
for(int i=;i<n;i++)
get_next(a+i);
printf("%d",ans);
}
int main(){
freopen("dream.in","r",stdin);
freopen("dream.out","w",stdout);
init();
fclose(stdin);
fclose(stdout);
return ;
}
[bzoj3670][2014湖北省队互测week2]似乎在梦中见过的样子的更多相关文章
- 题解 P6271 [湖北省队互测2014]一个人的数论
通过这道题学了伯努利数,写篇题解推一下 题目 先推一下式子 \[\sum_{i=1}^ni^d[gcd(i,n)=1] \] \[\sum_{i=1}^{n}i^d\sum_{k|i}\sum_{k| ...
- bug运输[辽宁2014年省队互测一]
奇奇怪怪的题目,不知道他要我们干什么. 我们观察一波局势,发现答案最大不过5.因为如果答案是6或以上的话,我们就至少要2^(5*5)个5*5的方格. 仔细计算一波时间复杂度,再信仰一波,坚信暴力压正解 ...
- 【河北省队互测】 gcd BZOJ 2818
Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sa ...
- STOI补番队互测#2
Round2轮到我出了>_<(目测总共10人参加 实际共七人) 具体情况: #1: KPM,360 #2:ccz181078,160 #3:child,150 可惜KPM没看到第一题样例里 ...
- GCD BZOJ2818 [省队互测] 数学
题目描述 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 输入输出格式 输入格式: 一个整数N 输出格式: 答案 输入输出样例 输入样例#1: 复制 4 ...
- 【loj2461】【2018集训队互测Day 1】完美的队列
#2461. 「2018 集训队互测 Day 1」完美的队列 传送门: https://loj.ac/problem/2461 题解: 直接做可能一次操作加入队列同时会弹出很多数字,无法维护:一个操作 ...
- 【2018集训队互测】【XSY3372】取石子
题目来源:2018集训队互测 Round17 T2 题意: 题解: 显然我是不可能想出来的……但是觉得这题题解太神了就来搬(chao)一下……Orzpyz! 显然不会无解…… 为了方便计算石子个数,在 ...
- 【CH 弱省互测 Round #1 】OVOO(可持久化可并堆)
Description 给定一颗 \(n\) 个点的树,带边权. 你可以选出一个包含 \(1\) 顶点的连通块,连通块的权值为连接块内这些点的边权和. 求一种选法,使得这个选法的权值是所有选法中第 \ ...
- 洛谷 P4463 - [集训队互测 2012] calc(多项式)
题面传送门 & 加强版题面传送门 竟然能独立做出 jxd 互测的题(及其加强版),震撼震撼(((故写题解以祭之 首先由于 \(a_1,a_2,\cdots,a_n\) 互不相同,故可以考虑求出 ...
随机推荐
- django复习笔记3:urls/views/templates三板斧
0.先看看文件结构 mysite/ mysite/ ├── __pycache__ │ └── manage.cpython-.pyc ├── blog │ ├── __init__.py │ ...
- Firefox访问https出现 ssl_error_weak_server_ephemeral_dh_key错误
一个自签名的内部网站当ff访问时出现以下错误 SSL received a weak ephemeral Diffie-Hellman key in Server Key Exchange hands ...
- .net AES加密解密
using System; using System.Collections.Generic; using System.Text; using System.Secur ...
- DBA必备:MySQL数据库常用操作和技巧
DBA必备:MySQL数据库常用操作和技巧 2011-02-25 15:31 kaduo it168 字号:T | T MySQL数据库可以说是DBA们最常见和常用的数据库之一,为了方便大家使用,老M ...
- python学习之用正则处理log(持续更新,ftace)
1. ftrace的输出如下图所示: [003] 48375.494595: clear_buddies <-pick_next_entity m=re.match("^\[([0-9 ...
- Windows 8.1 新增控件之 Flyout
本篇为大家介绍Flyout 控件,Flyout 属于一种轻量级交互控件,可以支持信息提示或用户交互.与传统Dialog 控件不同的是Flyout 控件可通过直接点击对话框外部区域忽略. Flyout ...
- JBOSS只能本机localhost和127.0.0.1能访问的解决
一句话: %jboss_home%\bin>standalone.bat -Djboss.bind.address=0.0.0.0 也可以直接编辑standalone.xml,将里面所有127. ...
- struts2 Result Type四个常用转跳类型
Result的四个常用转跳类型分别为 Dispatcher 用来转向页面,是Struts的默认形式 Redirect 重定向到一个URL Chain 用来处理Action链 RedirectAc ...
- NodeJs爬虫—“眼睛好看是一种什么样的体验?”
逛知乎的时候经常看见有好多的福利贴(钓鱼贴),这不最近又让我发现了一个——眼睛好看是一种什么样的体验是一种怎么样的体验呢?我决定把答案里的照片都下到我的电脑里好好体验一下,怎么做呢,一张一张下好麻烦, ...
- ModernUI教程:使用WPF4.0
Modern UI 同时支持WPF4.0和4.5.下载包中包含了这两个版本的程序集.当你使用Nuget下载时,会根据你选择的运行时版本自动选择对应的版本下载.而Visual Studio2012的模板 ...