HDOJ 3374 String Problem
来源:互联网 发布:淘宝 香港 编辑:程序博客网 时间:2024/04/29 03:08
String Problem
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1990 Accepted Submission(s): 872
Problem Description
Give you a string with length N, you can generate N strings by left shifts. For example let consider the string “SKYLONG”, we can generate seven strings:
String Rank
SKYLONG 1
KYLONGS 2
YLONGSK 3
LONGSKY 4
ONGSKYL 5
NGSKYLO 6
GSKYLON 7
and lexicographically first of them is GSKYLON, lexicographically last is YLONGSK, both of them appear only once.
Your task is easy, calculate the lexicographically fisrt string’s Rank (if there are multiple answers, choose the smallest one), its times, lexicographically last string’s Rank (if there are multiple answers, choose the smallest one), and its times also.
String Rank
SKYLONG 1
KYLONGS 2
YLONGSK 3
LONGSKY 4
ONGSKYL 5
NGSKYLO 6
GSKYLON 7
and lexicographically first of them is GSKYLON, lexicographically last is YLONGSK, both of them appear only once.
Your task is easy, calculate the lexicographically fisrt string’s Rank (if there are multiple answers, choose the smallest one), its times, lexicographically last string’s Rank (if there are multiple answers, choose the smallest one), and its times also.
Input
Each line contains one line the string S with length N (N <= 1000000) formed by lower case letters.
Output
Output four integers separated by one space, lexicographically fisrt string’s Rank (if there are multiple answers, choose the smallest one), the string’s times in the N generated strings, lexicographically last string’s Rank (if there are multiple answers, choose the smallest one), and its times also.
Sample Input
abcderaaaaaaababab
Sample Output
1 1 6 11 6 1 61 3 2 3
Author
WhereIsHeroFrom
Source
HDOJ Monthly Contest – 2010.04.04
#include <cstdio>#include <cstring>const int N = 1000010;char str[N];int next[N];int len;void get_next() {int i = 0, j = -1;next[i] = j;while (str[i]) {if (j == -1 || str[i] == str[j])next[++i] = ++j;elsej = next[j];}}int get_min(bool flag) {int i, j, k;i = k = 0, j = 1;while (i < len && j < len && k < len) {int t = str[(i + k) % len] - str[(j + k) % len];if (t == 0)++k;else {if (flag) {if (t < 0) i += k + 1;else j += k + 1;}else {if (t < 0) j += k + 1;else i += k + 1;}if (i == j)++j;k = 0;}}return i < j ? i + 1 : j + 1;}int main() {while (~scanf("%s", str)) {len = strlen(str);int x = get_min(0);int y = get_min(1);get_next();int t = len - next[len];if (len % t == 0)t = len / t;elset = 1;printf("%d %d %d %d\n", x, t, y, t);}return 0;}
0 0
- HDOJ 3374 String Problem
- HDOJ 5008 Boring String Problem
- 【后缀数组】 HDOJ 5008 Boring String Problem
- 【字符串最小(大)表示法+KMP求循环节】hdoj 3374 String Problem
- hdu 3374 String Problem
- HDU 3374 String Problem
- hdu 3374 String Problem
- hdu 3374 String Problem
- HDU 3374 String Problem
- HDU 3374 String Problem
- HDU 3374 String Problem
- HDU 3374String Problem
- 3374 String Problem
- HDU 3374 String Problem
- hdu 3374 String Problem
- 【HDOJ 】 String problem(最大权闭合图)
- HDOJ--1865 1string +HDOJ--2504 A==B? +Problem B
- String Problem
- android事件分发机制详解
- ubuntu下文件压缩/解压缩命令总结
- LIST接口及其子类
- 剑指 offer:反转链表
- linux创建新进程的过程
- HDOJ 3374 String Problem
- Android 打造编译时注解解析框架 这只是一个开始
- 取消系统自动对齐字节
- 编程修养
- 虚拟机VirtualBox安装windows操作系统(图文教程)
- Linux下破解密码
- STL自定义排序函数 需要注意的问题
- 用三次贝塞尔曲线拟合圆弧
- Linux 下重新挂载分区方法