题意

找到一个字符串中最先出现的最小(大)表示位置,和最小(大)表示串出现次数

分析

用最小(大)表示法求出最先出现的最小(大)表示位置,然后将串长扩两倍用exkmp找出现次数。

Code

#include<bits/stdc++.h>
#define fi first
#define se second
#define lson l,mid,p<<1
#define rson mid+1,r,p<<1|1
#define pb push_back
#define ll long long
using namespace std;
const int inf=1e9;
const int mod=1e9+7;
const int maxn=2e6+10;
char s[maxn];
int n,nex[maxn];
int Get_min()
{
int i = 0,j = 1,k = 0,t;
while(i < n && j < n && k < n)
{
t = s[(i+k)%n] - s[(j+k)%n];
if(!t) k++;
else
{
if(t > 0) i += k+1;
else j += k+1;
if(i == j) j++;
k = 0;
}
}
return i >j ?j :i;
}
int Get_max()
{
int i = 0,j = 1,k = 0,t;
while(i < n && j < n && k < n)
{
t = s[(i+k)%n] - s[(j+k)%n];
if(!t) k++;
else
{
if(t > 0) j += k+1;
else i += k+1;
if(i == j) i++;
k = 0;
}
}
return i >j ?j :i;
}
int exkmp(int pos){
int i=pos+1,j=0,p0=pos+1,cnt=1;
while(i<2*n&&j<n&&s[i]==s[j+pos]) ++i,++j;
nex[p0]=j;if(j==n) ++cnt;
for(int i=pos+2;i<n;i++){
j=max(0,min(nex[p0]+p0-i,nex[i-p0+pos]));
if(i+j<nex[p0]+p0){
nex[i]=j;
}else{
int k=i+j;
while(k<2*n&&j<n&&s[k]==s[j+pos]) ++k,++j;
nex[i]=j;p0=i;
}
if(nex[i]==n) ++cnt;
}
return cnt;
}
int main(){
//ios::sync_with_stdio(false);
//freopen("in","r",stdin);
while(~scanf("%s",s)){
n=strlen(s);
for(int i=n;i<2*n;i++) s[i]=s[i-n];
int j=Get_min();
printf("%d %d ",j+1,exkmp(j));
j=Get_max();
printf("%d %d\n",j+1,exkmp(j));
}
return 0;
}

HDU 3374 exkmp+字符串最大最小表示法的更多相关文章

  1. hdu 3374 String Problem(kmp+最小表示法)

    Problem Description Give you a string with length N, you can generate N strings by left shifts. For ...

  2. hdu 3374 String Problem(最小表示法+最大表示法+kmp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题意:给出一个字符串问这个字符串最小表示的最小位置在哪,还有有几个最小表示的串.最大表示的位置在 ...

  3. HDU 4162 Shape Number(字符串,最小表示法)

    HDU 4162 题意: 给一个数字串(length <= 300,000),数字由0~7构成,求出一阶差分码,然后输出与该差分码循环同构的最小字典序差分码. 思路: 第一步是将差分码求出:s[ ...

  4. HDU——2609How many(字符串的最小表示法+substr)

    How many Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  5. HDU 4162 Shape Number (最小表示法)

    题意:给你一串n个数,求出循环来看一阶差的最小字典序:数字串看成一个顺时针的环,从某一点开始顺时针循环整个环,保证字典序最小就是答案 例如给你 2 1 3 就会得到(1-2+8 注意题意负数需要加8) ...

  6. HDU3374 字符串最大最小表示法模板

    一开始没太看懂什么意思,拿笔反复推了一遍才大概知道最大最小表示法是怎么求的,感觉太神奇了... #include <iostream> #include <cstdio> #i ...

  7. String Problem - HDU 3374 (kmp+最大最小表示)

    题目大意:有一个字符串长度为N的字符串,这个字符串可以扩展出N个字符串,并且按照顺序编号,比如串  ” SKYLONG “ SKYLONG 1 KYLONGS 2 YLONGSK 3 LONGSKY ...

  8. hdu 2609 How many(最小表示法)

    Problem Description Give you n ( n < 10000) necklaces ,the length of necklace will not large than ...

  9. bzoj5130 字符串的周期(kmp,最小表示法)

    bzoj5130 字符串的周期(kmp,最小表示法) bzoj 题解时间 m很大,n很小. 周期很容易求,就是kmp之后n-fail[n]. 之后对于枚举所有的字符串用最小表示法,暴力搜索. 能过就完 ...

随机推荐

  1. 动态对象(dynamic)的用法

    说到正确用法,那么首先应该指出一个错误用法: 常有人会拿var这个关键字来和dynamic做比较.实际上,var和dynamic完全是两个概念,根本不应该放在一起做比较.var实际上是编译期抛给我们的 ...

  2. ScrumBasic开发记录

    ScrumBasic 是基于asp.net core 1.0的开源敏捷管理软件.目前第一版.目前只有很基础的东西.希望我能将这个项目演变下去. 地址:https://github.com/CAH-Fl ...

  3. Spring切面编程Aspect之@Before和@Around用法

    查看dao层使用的sql import java.util.Arrays; import org.apache.commons.lang.ArrayUtils; import org.aspectj. ...

  4. Git忽略已追踪文件或文件夹

    今天拉取代码,用vs生成后发现obj文件夹下自动生成的文件被同事提交了,这个本应该加入到ignore的 我就需要把这个文件夹加入到gitignore, 不过已经追踪的文件和文件夹,直接添加到gitig ...

  5. django 权限控制精简版

    视图代码: 视图代码 def index(request): return render(request,'index.html') def login(request): if request.me ...

  6. 系统模块 sys 函数的调用

    系统模块 sys 运行时系统相关的信息 sys模块的数据 数据 描述 sys.path 模块搜索路径 path[0] 是当前脚本程序的路径名,否则为 '' sys.modules 已加载模块的字典 s ...

  7. css 制作一个点

    aside li a:before { content: ''; display: inline-block; width: 4px; height: 4px; background-color: # ...

  8. 【异常】 Ensure that config phoenix.schema.isNamespaceMappingEnabled is consistent on client and server.

    1 详细异常 ror: ERROR 726 (43M10): Inconsistent namespace mapping properties. Ensure that config phoenix ...

  9. JQuery初始加载时注册文本框失去焦点事件

    在JQuery初始加载时注册文本框失去焦点事件 $(function(){ $('#文本框ID').blur(function(){ //对文本框内容进行处理 }); });

  10. yum安装mysql-server

    yum install mysql-server mysql vi /etc/my.cnf [client] default-character-set=utf8 service mysqld sta ...