题意:输出一个环形字符串的最小字典序的首位置,以及最大字典序的首位置,以及这个字符串的原字符串的循环节.......

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define M 1000020
int next[M];
char s[M];
void getnext()
{
int i=0,j=-1;
next[0]=-1;
int len=strlen(s);
while(i<len)
{
if(j==-1||s[i]==s[j])
{
i++;
j++;
next[i]=j;
}
else
j=next[j];
}
}
int workzx(int m,char str[])
{
int i,j,l;
i=0; j=1;
while(i<m && j<m)
{
for(l=0;l<m;l++)
if(str[(i+l)%m]!=str[(j+l)%m]) break;
if(l>m) break;
if(str[(i+l)%m] > str[(j+l)%m])
i=i+l+1;
else
j=j+l+1;
if(i==j) j=i+1;
}
if(i<j) return i;
return j;
}
int workzd(int len,char pat[]) //最大表示法
{
//int len = strlen(pat);
int i=0,j=1,k=0;
while(i<len && j<len && k<len)
{
int t = pat[(i+k)%len] - pat[(j+k)%len];
if(!t) k++;
else
{
if(t>0) j = j+k+1;
else i = i+k+1;
if(i == j) j++;
k = 0 ;
}
}
return i<j?i:j;
} int main()
{
int n;
while(scanf("%s",s)>0)
{
int len=strlen(s);
int cnt1=workzx(len,s);
int cnt2=workzd(len,s);
getnext();
int sum=0;
if(len%(len-next[len])==0)
sum=len/(len-next[len]);
else
sum=1;
printf("%d %d %d %d\n",cnt1+1,sum,cnt2+1,sum);
}
return 0;
}

hdu3374(最小最大表示法以及kmp)的更多相关文章

  1. 【HDU3374】 String Problem (最小最大表示法+KMP)

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

  2. HDU3374 String Problem —— 最小最大表示法 + 循环节

    题目链接:https://vjudge.net/problem/HDU-3374 String Problem Time Limit: 2000/1000 MS (Java/Others)    Me ...

  3. kuangbin专题十六 KMP&&扩展KMP HDU3347 String Problem(最小最大表示法+kmp)

    Give you a string with length N, you can generate N strings by left shifts. For example let consider ...

  4. Lasso回归算法: 坐标轴下降法与最小角回归法小结

    前面的文章对线性回归做了一个小结,文章在这: 线性回归原理小结.里面对线程回归的正则化也做了一个初步的介绍.提到了线程回归的L2正则化-Ridge回归,以及线程回归的L1正则化-Lasso回归.但是对 ...

  5. A-06 最小角回归法

    目录 最小角回归法 一.举例 二.最小角回归法优缺点 2.1 优点 2.2 缺点 三.小结 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等 ...

  6. hdu3374最小表示法+KMP

    题意:       给你一个最长100W的串,然后让你找到最小同构子串,还有最大同构子串的下标,最小同构子串就是把字符串连接成一个环,然后选择一个地方断开,得到的一个ASCII最小的子串(求最大同理) ...

  7. HDU 3374 最小/大表示法+KMP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3374 题意:给定一个串s,该串有strlen(s)个循环同构串,要求输出字典序最小的同构串的下标,字典 ...

  8. kuangbin专题十六 KMP&&扩展KMP HDU2609 How many (最小字符串表示法)

    Give you n ( n < 10000) necklaces ,the length of necklace will not large than 100,tell me How man ...

  9. String Problem hdu 3374 最小表示法加KMP的next数组

    String Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

随机推荐

  1. HTTP所承载的货物(图像、文本、软件等)要满足的条件

    HTTP所承载的货物(图像.文本.软件等)要满足的条件: •可以被正确识别 通过Content-Type 首部说明媒体格式,Content-Language 说明语言,以便浏览器和其他客户端能正确处理 ...

  2. Java内存泄露原因详解

    一.Java内存回收机制 不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址.Java中对象是采用new或者反射的方法创建的, 这些对象的创建都是在堆(He ...

  3. 【VMware虚拟化解决方案】配置和部署VMware ESXi5.5

    [VMware虚拟化解决方案]配置和部署VMware ESXi5.5 时间 2014-04-08 10:31:52  让"云"无处不在的博客原文  http://mabofeng. ...

  4. CAS连接微软活动目录的配置方法

    原文地址:http://blog.csdn.net/baozhengw/article/details/3857669在微软活动目录中建立一个用户节点,帐号为wangzhenyu,cn为zhenyu ...

  5. HDOJ 5242 Game

    Game Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  6. (一)Linux Shell编程——简介、变量、字符串、数组

    1. Shell简介 1.1 Shell出现背景 Shell 既是一种脚本编程语言,也是一个连接内核和用户的软件. 对于图形界面,用户点击某个图标就能启动某个程序:对于命令行,用户输入某个程序的名字( ...

  7. Android应用的自动升级、更新模块的实现

    我们看到很多Android应用都具有自动更新功能,用户一键就可以完成软件的升级更新.得益于Android系统的软件包管理和安装机制,这一功能实现起来相当简单,下面我们就来实践一下.首先给出界面效果: ...

  8. jQuery on() 方法问题

    <!DOCTYPE html><html><head><script src="https://cdn.bootcss.com/jquery/1.1 ...

  9. Python学习笔记020——数据库中的数据类型

    1 数值类型 数值类型分为有符号signed和无符号unsigned两种. 1.1 整型 int (1)bigint 极大整型(8个字节) 范围 :-2**64 ~ 2**64 - 1 -922337 ...

  10. UHF RFID编码之TPP编码

    GB/T 39768通信交互模型 读写器使用TPP对基带数据进行编码,使用DSB-ASK或者SSB-ASK方式调制射频载波,向一个或者多个标签发送命令.命令发送后,读写器继续发送未经调制的射频载波,并 ...