以前听过,不知道是什么,其实就是字符串首尾相连成一个环,n种切法求一个字典序最小的表示. 朴素算法大家都懂.O(n)的算法代码非常简单,最主要的思想是失配的时候尽可能大的移动指针. 另外附上一个不错的字符串算法总结:http://duanple.blog.163.com/blog/static/709717672009825004092/ #include<bits/stdc++.h> using namespace std; ; char s[maxn]; int main() { //fr…
Hidden Passwordhttp://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=729 Time Limit: 2 Seconds      Memory Limit: 65536 KB Some time the programmers have very strange ways to hide their passwords. See for example how Billy "Hacker" Geits hi…
最小表示法就是一个字符串构成一个环,找以哪个点为开头字典序最小. 然后我们就可以用n2的算法愉快的做啦~实际上有O(n)的做法的,就是用两个指针扫,如果这两个位置的字典序相等,就一起往后,如果某一个大,就把那个指针指到大的那个的后面. 每次至少有一个指针往后移一个,复杂度就是线性的了. (自己YY的,求不出锅) #include <iostream> #include <cstdio> #include <cstring> using namespace std; in…
Hidden Password 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte总提交: 53 测试通过: 19 描述 Some time the programmers have very strange ways to hide their passwords. See for example how Billy "Hacker" Geits hide his password. Billy chooses a string S compo…
Hidden Password ACM South Eastern Europe -- 2003 Sometimes the programmers have very strange ways of hiding their passwords. Billy "Hacker" Geits chooses a string S composed of L (5 <= L <= 100,000) lowercase letters ('a'..'z') with length…
洛谷题目链接:[USACO5.5]隐藏口令Hidden Password 题目描述 有时候程序员有很奇怪的方法来隐藏他们的口令.Binny会选择一个字符串S(由N个小写字母组成,5<=N<=5,000,000),然后他把S顺时针绕成一个圈,每次取一个做开头字母并顺时针依次取字母而组成一个字符串.这样将得到一些字符串,他把它们排序后取出第一个字符串.把这个字符串的第一个字母在原字符串中的位置-1做为口令. 如字符串alabala,按操作的到7个字符串,排序后得: aalabal abalaal…
P1709 [USACO5.5]隐藏口令Hidden Password 题目描述 有时候程序员有很奇怪的方法来隐藏他们的口令.Binny会选择一个字符串S(由N个小写字母组成,5<=N<=5,000,000),然后他把S顺时针绕成一个圈,每次取一个做开头字母并顺时针依次取字母而组成一个字符串.这样将得到一些字符串,他把它们排序后取出第一个字符串.把这个字符串的第一个字母在原字符串中的位置-1做为口令. 如字符串alabala,按操作的到7个字符串,排序后得: aalabal abalaal a…
P1709 [USACO5.5]隐藏口令Hidden Password 题目描述 有时候程序员有很奇怪的方法来隐藏他们的口令.Binny会选择一个字符串S(由N个小写字母组成,5<=N<=5,000,000),然后他把S顺时针绕成一个圈,每次取一个做开头字母并顺时针依次取字母而组成一个字符串.这样将得到一些字符串,他把它们排序后取出第一个字符串.把这个字符串的第一个字母在原字符串中的位置-1做为口令. 如字符串alabala,按操作的到7个字符串,排序后得: aalabal abalaal a…
传送门 题意: 此题意很好理解,便不在此赘述: 题解: 解题思路:KMP求字符串最小循环节+拓展KMP ①首先,根据KMP求字符串最小循环节的算法求出字符串s的最小循环节的长度,记为 k: ②根据拓展KMP求出字符串s的nex[]数组,那么对于由第 i 位打头构成的新数b,如何判断其与原数a的大小关系呢? 1)如果 i%k == 0,那么b == a: 2)如果 i%k ≠ 0 ,令L=nex[i],那么只需判断s[ i+L ]与s[ L ]的大小关系即可,需要注意的是,如果i+L = len呢…
题目大意: 求字符串最小表示. 思路: 本来按照lbn187的课件,知道SAM可以求字符串最小表示. 然而他并没有提供例题,就自己找了一道做. 大体思想就是把字符串复制一遍接在后面,构建SAM,然后每次跑小的转移. 跑n次以后就跑到了最小表示的末尾,用该状态的len值减去n就是最小表示的起始位置. 然后交上去就MLE了. 看了网上的题解发现求最小表示有专门的做法,也是O(n)的,还特别简单,不知道比SAM妙到哪里去了. 核心思想就是设两个指针i和j,表示目前比较的循环串的开头位置. 再用k表示目…