Problem - 3374
KMP求循环节。
http://www.cnblogs.com/wuyiqi/archive/2012/01/06/2314078.html
循环节推导的证明相当的好,这题是很裸的套算法的题。
代码如下:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5
 6 using namespace std;
 7
 8 const int N = 1111111;
 9 char buf[N];
10 int next[N];
11
12 void getNext(char *str) {
13     char *si = str;
14     int *ni = next;
15     int j = *next = -1;
16     while (*si) {
17         while (j > -1 && *si != *(str + j)) j = *(next + j);
18         si++, ni++, j++;
19 //        if (*si == *(str + j)) *ni = *(next + j);
20 //        else *ni = j;
21         *ni = j;
22     }
23 }
24
25 int minMaxExp(char *s, bool mini) {
26     int i = 0, j = 1, k = 0, t;
27     int len = strlen(s);
28     while (i < len && j < len && k < len) {
29 //        cout << i << ' ' << j << ' ' << k << endl;
30         t = s[(i + k) % len] - s[(j + k) % len];
31         if (!t) k++;
32         else {
33             if (mini ^ (t > 0)) j += k + 1;
34             else i += k + 1;
35             if (i == j) j++;
36             k = 0;
37         }
38     }
39     return min(i, j);
40 }
41
42 int main() {
43     while (cin >> buf) {
44         getNext(buf);
45 //        for (int i = 0, sz = strlen(buf); i < sz; i++) cout << next[i] + 1 << ' '; cout << endl;
46         int cycle = strlen(buf);
47 //        cout << "got next" << endl;
48         cycle /= (cycle - next[cycle - 1] - 1);
49         cout << minMaxExp(buf, true) + 1 << ' ' << cycle << ' ' << minMaxExp(buf, false) + 1 << ' ' << cycle << endl;
50     }
51     return 0;
52 }

View Code

——written by Lyon

转载于:https://www.cnblogs.com/LyonLys/p/hdu_3374_Lyon.html

hdu 3374 String Problem (字符串最小最大表示 + KMP求循环节)相关推荐

  1. HDU - 3374 String Problem(最小表示法+最大表示法+KMP的next数组)

    题目链接:点击查看 题目大意:给出一个字符串,现在问字符串不断向左循环所能形成的n个字符串中,字典序最小和最大的字符串的编号为多少,分别有多少个 题目分析:字符串最小表示法的模板题,证明和模板都是看大 ...

  2. hdu 3746 kmp求循环节 下标从1开始

    长度为m[1,2...m]的模式的循环节为 m-next[m] , aaa  循环节clc为1  (clc=m-next[m]= 3-2  =1)       此时   m%clc == 0   表示 ...

  3. HDU 3374 String Problem (KMP+最大最小表示)

    KMP,在有循环节的前提下: 循环节 t = len-next[len], 个数num = len/(len-next[len]); 个人理解,如果有循环节,循环节长度必定小于等于len/2, 换句话 ...

  4. HDU-3374 String Problem (最小表示法)

    题意:给你一个字符串,并让他不断的进行循环左移,问字典序最小的字符串是第几个,出现的次数是多少,最大的字符串是第几个,出现的次数是多少? 分析:最小字符串和最大字符串用最小表示法即可找到,出现的次数, ...

  5. hdu P3374 String Problem

    今天又在lyk大佬的博客学会了--最小表示法(异常激动 发篇题解纪念一下 说在前面:给luogu提个建议最小表示法的题太少了,都被hdu抢去了!!! 我们先看一下题目 看完后可以用一个字概括--蒙,两 ...

  6. SZUACM集训字符串基础总结: 字符串最小表示 ,KMP, EXKMP, Manracher, Trie树,字符串的hash; 附带一写常见的运用技巧,邝斌大佬的板子和例题[持续更新]

    第一部分 字符串的匹配<-------->KMP 模式匹配:子串的定位运算称为串的模式匹配或串匹配. 假设有两个串S,T,设S为主串,也称正文串,T为子串,也称为模式,在主串S中查找与模式 ...

  7. Problem A. MUV LUV EXTRA(kmp求最小循环节)

    LINK 最小化 a ∗ p − b ∗ l a*p-b*l a∗p−b∗l 其中 p p p表示循环节总长, l l l表示循环节长度 若循环节从 i i i位置开始,那么一定需要延续到末尾 考虑固 ...

  8. hdu 3374 String Proble

    kmp+最小表示法 #include<iostream> #define maxn 1000010 using namespace std; string str; int nextt[m ...

  9. HDU 3068 2017 Multi-University Training Contest - Team 1 1006 Fuction: 循环节+最后一步

    题意:给出一个0..n-1的全排列a,给出一个0..m-1的全排列b,现在要求计算函数F(定义域0..n-1 值域0..m-1)的个数,使得对所有的0..n-1的 i 都有 F(i)=b(F(ai)) ...

最新文章

  1. java maven项目使用sonar审核代码
  2. Hash 函数资源链接汇总
  3. 几个重要的 ASM Disk Groups 参数
  4. python处理html的table标签
  5. html中的高和宽背景色怎么写,css background-size与背景图片填满div
  6. Celery 启动报错 can_read() got an unexpected keyword argument timeout
  7. 20145233 20145228《信息安全系统设计基础》第二次实验报告
  8. docker-compose 一键部署分布式配置中心Apollo
  9. Failed to issue method call Unit mysql service failed to lo
  10. 如何进行cad地理配准_【教程】自带高度建筑轮廓如何制作分色图
  11. 103-PHP定义一个类
  12. python 单例模式,一个类只能生成唯一的一个实例,重写__new__方法详解
  13. 开发板添加上 Web 界面+openwrt luci界面修改
  14. 我的第一篇CSDN博客
  15. 算法:什么是宠物收养所问题?
  16. 音标、音节、音素、音符
  17. 前端监控SDK开发分享
  18. [XUPT_ACM]寒假第二次比赛题解
  19. 四个核心技术构成智能语音系统
  20. textpad和masm搭建汇编环境

热门文章

  1. 存储器的分配与回收算法实现_垃圾内存回收算法
  2. StringUtil中常用的方法
  3. java 多项式拟合最多的项数_机器学习(1)--线性回归和多项式拟合
  4. 使用python下载文件_详解使用Python下载文件的几种方法
  5. android 请求权限失败怎么办,java – Android HTTP POST请求错误 – 套接字失败EACCES(权限被拒绝)...
  6. 深入浅出全面解析RDMA
  7. 实现人脸识别性别之路---open CV将图片显示出来
  8. (转)在Eclipse中创建Maven多模块工程
  9. qq推广 qq在线客服工具
  10. Content Security Policy的学习理解