poj2752 bzoj3670
2752这是一道关于next函数的题
(其实好像也可以用后缀数组暴力搞搞,但大概会超时)
根据next[i]=max{j} (s[0..j]=s[i-j..i] j<i)
不难发现这正是某个串既是前缀又是后缀的形式
所以我们先求一遍kmp,然后就是找出所有这样的串
首先最长的肯定是原串,,次长的肯定是s[0..next[n]]
那下一个呢?答案是只要一直从n按着next迭代下去就能找到可行解。
我们不妨设next[i]=j next[j]=k,当i是可行解,那j一定也是
因为s[0..j]=s[i-j..i]可得s[0..k]=s[i-k..k]=s[i-k,i]
然后就解决了
bzoj3670是今年的noi题,其实也是一样的,只不过多了不能重叠,其实也是很好解决的
code:poj2752 var next,q:array[..] of longint;
i,j,n,t :longint;
s:array[..] of char;
ch:ansistring; begin
while not eof do
begin
readln(ch);
n:=length(ch);
for i:= to n- do
s[i]:=ch[i+];
i:=;
j:=-;
next[]:=-;
while (i<n) do
begin
if (j=-) or (s[i]=s[j]) then
begin
inc(i);
inc(j);
next[i]:=j;
end
else j:=next[j];
end;
t:=;
j:=n;
while j<> do
begin
inc(t);
q[t]:=next[j];
j:=next[j];
end;
for i:=t- downto do
write(q[i],' ');
writeln(n);
end;
end.
poj2752
const mo=; var f,next:array[..] of longint;
a:array[..] of char;
k,n,t,i,j:longint;
ans:int64;
s:ansistring; begin
readln(k);
while k> do
begin
dec(k);
readln(s);
n:=length(s);
for i:= to n do
a[i-]:=s[i];
i:=;
j:=-;
next[]:=-;
ans:=;
while i<n do
begin
if (j=-) or (a[i]=a[j]) then
begin
inc(i);
inc(j);
next[i]:=j;
f[i]:=f[j]+;
end
else j:=next[j];
end;
i:=;
j:=-;
while i<n do
begin
if (j=-) or (a[i]=a[j]) then
begin
inc(i);
inc(j);
while (j*>i) do j:=next[j];
ans:=ans*int64(f[j]+) mod mo;
end
else j:=next[j];
end;
writeln(ans);
end;
end.
bzoj3670
poj2752 bzoj3670的更多相关文章
- [BZOJ3670][UOJ#5][NOI2014]动物园
[BZOJ3670][UOJ#5][NOI2014]动物园 试题描述 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学 ...
- 【BZOJ3670】动物园(KMP算法)
[BZOJ3670]动物园(KMP算法) 题面 BZOJ 题解 神TM阅读理解题 看完题目之后 想暴力: 搞个倍增数组来跳\(next\) 每次暴跳\(next\) 复杂度\(O(Tnlogn)\) ...
- [poj2752]Seek the Name, Seek the Fame_KMP
Seek the Name, Seek the Fame poj-2752 题目大意:给出一个字符串p,求所有既是p的前缀又是p的后缀的所有字符串长度,由小到大输出. 注释:$1\le strlen( ...
- 【BZOJ3670】【NOI2014】动物园(KMP算法)
[BZOJ3670]动物园(KMP算法) 题面 BZOJ 题解 神TM阅读理解题 看完题目之后 想暴力: 搞个倍增数组来跳\(next\) 每次暴跳\(next\) 复杂度\(O(Tnlogn)\) ...
- 【bzoj3670】: [Noi2014]动物园 字符串-kmp-倍增
[bzoj3670]: [Noi2014]动物园 一开始想的是按照kmp把fail算出来的同时就可以递推求出第i位要f次可以跳到-1 然后把从x=i开始顺着fail走,走到fail[x]*2<i ...
- POJ2752 Seek the Name, Seek the Fame —— KMP next数组
题目链接:https://vjudge.net/problem/POJ-2752 Seek the Name, Seek the Fame Time Limit: 2000MS Memory Li ...
- POJ-2752 Seek the Name, Seek the Fame 字符串问题 KMP算法 求前后缀串相同数木
题目链接:https://cn.vjudge.net/problem/POJ-2752 题意 给一个字符串,求前缀串跟后缀串相同的前缀串的个数 例:alala 输出:a, ala, alala 思路 ...
- poj2752
poj2752找所有的前缀等于后缀,那就是找所有前缀等于后缀的前缀,递归再用栈存一下 #include<iostream> #include<cstdio> #include& ...
- POJ-2752(KMP算法+前缀数组的应用)
Seek the Name, Seek the Fame POJ-2752 本题使用的算法还是KMP 最主要的片段就是前缀数组pi的理解,这里要求解的纸盒pi[n-1]有关,但是还是需要使用一个循环来 ...
随机推荐
- 为什么要设置Java环境变量(详解)
关于java环境变量配置讲解: 1. PATH环境变量.作用是指定命令搜索路径,在shell下面执行命令时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序.我们需要把 jdk安装目录下 ...
- MyXLS案例
using System; using System.Data; using org.in2bits.MyXls; namespace Maticsoft.Common { /// <summa ...
- CSS jQuery HTML5 CSS3
jquery css3图片文字介绍鼠标滚动页面动画单页 http://www.17sucai.com/preview/1/2013-12-30/%E5%8A%A8%E7%94%BB%E5%8D%95% ...
- 分享一个在PearOS里面的plank的配置文件
plank的配置文件的路径是/home/pear/.config/plank/dock1/settings #This file auto-generated by Plank. #2013-09-0 ...
- 283. Move Zeroes(C++)
283. Move Zeroes Given an array nums, write a function to move all 0's to the end of it while mainta ...
- MVVM模式应用 之介绍
M-V-VM (1)M:即Model,由现实世界抽象出来的模型: V:即View,视图,界面,该界面与用户输入设备进行交互: 但是View与Model如何进行交互呢? Binding便可以发挥作用了, ...
- Trac的使用思考
为什么要使用Trac? 这是由于在软件开发当中需要设定阶段性的目标,和进行文档的统一归档,并且便于进行多人协同工作. Trac是基于Python开发的.所以要使用Trac就需要对于Python有一定的 ...
- Ubuntu 源
原文地址: Ubuntu 12.04添加源 sudo vim /etc/apt/sources.list #网易163 deb http://mirrors.163.com/ubuntu/ preci ...
- php hook example
http://www.thinkphp.cn/code/337.html http://blog.micxp.com/index.php/archives/63/
- BOM 之 window
BOM 之 window 对象 在网页中定义的任何一个对象,变量和函数,都以 window 作为其 Global 对象,因此有权访问别的方法和属性 var age = 26; functi ...