[USACO5.5]Hidden Password
题目大意:
求字符串最小表示。
思路:
本来按照lbn187的课件,知道SAM可以求字符串最小表示。
然而他并没有提供例题,就自己找了一道做。
大体思想就是把字符串复制一遍接在后面,构建SAM,然后每次跑小的转移。
跑n次以后就跑到了最小表示的末尾,用该状态的len值减去n就是最小表示的起始位置。
然后交上去就MLE了。
看了网上的题解发现求最小表示有专门的做法,也是O(n)的,还特别简单,不知道比SAM妙到哪里去了。
核心思想就是设两个指针i和j,表示目前比较的循环串的开头位置。
再用k表示目前比较的循环串的长度。
当目前比较的串字典序一样大时,增加比较的长度。
当两个不一样大时,大的那个可以直接舍去,将开头位置加上k+1,继续比较。字典序小的不变。
一直比较到其中一个指针扫完整个字符串,这时小的那个指针就是最小表示的起始位置。
#include<cstdio>
#include<iostream>
int n;
std::string s,t;
int solve() {
int i=,j=;
while(i<n&&j<n) {
int k=;
while(s[(i+k)%n]==s[(j+k)%n]&&k<n) k++;
if(k==n) break;
(s[(i+k)%n]>s[(j+k)%n]?i:j)+=k+;
if(i==j) i++;
}
return std::min(i,j);
}
int main() {
std::cin>>n;
while(std::cin>>t) {
s+=t;
}
std::cout<<solve()<<std::endl;
return ;
}
[USACO5.5]Hidden Password的更多相关文章
- [洛谷P1709] [USACO5.5]隐藏口令Hidden Password
洛谷题目链接:[USACO5.5]隐藏口令Hidden Password 题目描述 有时候程序员有很奇怪的方法来隐藏他们的口令.Binny会选择一个字符串S(由N个小写字母组成,5<=N< ...
- P1709 [USACO5.5]隐藏口令Hidden Password
P1709 [USACO5.5]隐藏口令Hidden Password 题目描述 有时候程序员有很奇怪的方法来隐藏他们的口令.Binny会选择一个字符串S(由N个小写字母组成,5<=N<= ...
- 洛谷 P1709 [USACO5.5]隐藏口令Hidden Password
P1709 [USACO5.5]隐藏口令Hidden Password 题目描述 有时候程序员有很奇怪的方法来隐藏他们的口令.Binny会选择一个字符串S(由N个小写字母组成,5<=N<= ...
- [USACO5.5]隐藏口令Hidden Password [最小表示法模板]
最小表示法就是一个字符串构成一个环,找以哪个点为开头字典序最小. 然后我们就可以用n2的算法愉快的做啦~实际上有O(n)的做法的,就是用两个指针扫,如果这两个位置的字典序相等,就一起往后,如果某一个大 ...
- USACO 5.5 Hidden Password
Hidden Password ACM South Eastern Europe -- 2003 Sometimes the programmers have very strange ways of ...
- toj 3019 Hidden Password (最小表示法)
Hidden Password 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte总提交: 53 测试通过: 19 描述 Some time the progr ...
- [USACO5.5]隐藏口令Hidden Password
题目链接:传送门 题目大意:给你一个长度 N 的字符串,5<=N<=5,000,000,将首尾合并成环,断环成链并满足字典序最小,输出此时首字母在原串中的位置-1: 题目思路:最小表示法 ...
- 洛谷P1709 [USACO5.5]隐藏口令Hidden Password(最小表示法)
题目描述 有时候程序员有很奇怪的方法来隐藏他们的口令.Binny会选择一个字符串S(由N个小写字母组成,5<=N<=5,000,000),然后他把S顺时针绕成一个圈,每次取一个做开头字母并 ...
- zoj 1729 Hidden Password
Hidden Passwordhttp://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=729 Time Limit: 2 Seconds ...
随机推荐
- ubuntu16.04 eclipse+pydev 配置
参考:http://blog.csdn.net/bluish_white/article/details/56509446,http://blog.csdn.net/qing101hua/articl ...
- Tslib移植与分析【转】
转自:http://blog.csdn.net/water_cow/article/details/7215308 目标平台:LOONGSON-1B开发板(mips32指令集)编译平台:x86PC-- ...
- Linux学习笔记-文件处理和权限命令
目录 文件处理命令 touch cat tac more less head tail 链接命令 ln 权限命令 chmod 权限管理命令 chown chgrp umask 文件处理命令 touch ...
- mybatis待研究
1. mapper 中_parameter 的含义,是 参数? 为什么?
- Jmeter运行结果unicode编码乱码问题
一.web页面乱码 比如访问百度返回页面显示乱码,如下会有问号 如果想让他显示中文可以按以下操作: 1.打开jmter配置文件 bin/jmeter.properties 2.修改配置文件,查找“sa ...
- No.15 selenium for python JavaScript
JS处理滚动条 一.上下滚动 1.滚动条回到顶部: js="var q=document.documentElement.scrollTop=10000" driver.execu ...
- 左列動態添加菜單Repeater
前台代碼: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="left.aspx. ...
- MySQL学习笔记:delete from与truncate table的区别
在Mysql数据库的使用过程中,删除表数据可以通过以下2种方式: delete from table_name truncate table table_name (1)delete from语句可以 ...
- Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value
Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container ...
- 虚拟机的安装以及Linux的学习
安装虚拟机 对虚拟机的认识 其实初中的时候我就听说过虚拟机这个名词,当时的我还小,也不知道虚拟机是个什么东西,那时我傻傻的认为虚拟机只不过是电脑中的一个虚拟的计算机,没有什么实在的作用.后来随着大学课 ...