题目描述

有时候程序员有很奇怪的方法来隐藏他们的口令。Binny会选择一个字符串S(由N个小写字母组成,5<=N<=5,000,000),然后他把S顺时针绕成一个圈,每次取一个做开头字母并顺时针依次取字母而组成一个字符串。这样将得到一些字符串,他把它们排序后取出第一个字符串。把这个字符串的第一个字母在原字符串中的位置-1做为口令。

如字符串alabala,按操作的到7个字符串,排序后得:

aalabal

abalaal

alaalab

alabala

balaala

laalaba

labalaa

第一个字符串为aalabal,这个a在原字符串位置为7,7-1=6,则6为口令。

输入输出格式

输入格式:

第一行:一个数:N

第二行开始:字符串:S(每72个字符一个换行符)

输出格式:

一行,为得到的口令

输入输出样例

输入样例#1: 复制

7
anabana
输出样例#1: 复制

6

说明

题目满足:

30%的数据n<=10000

70%的数据n<=100000

100%的数据n<=5000000

时限 1s

题目翻译来自NOCOW。

USACO Training Section 5.5

//20170523新增数据四组

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 5000010
using namespace std;
int n,len,ans,l,r;
char s[MAXN],c;
int main(){
scanf("%d",&n);
n--;
for(int i=;i<=n;i++){
cin>>c;
s[i]=c;
}
for(int i=;i<=n;i++){
l=ans;r=i;
while(s[l]==s[r]){
l++;r++;
if(l>n) l=;
if(r>n) r=;
if(r==i) break;
}
if(s[l]>s[r]) ans=i;
}
printf("%d",ans);
}
/*
7
alabala
*/

90分的暴力

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=;
int n;
char s[maxn];
int Mini(int l){
int i,j,k;
i=;j=;k=;
while(i<l&&j<l){
k=;
while(s[(i+k)%l]==s[(j+k)%l]&&k<l) k++;
if(k==l) return (i<j)?i:j;
if(s[(i+k)%l]>s[(j+k)%l]) i=i+k+;
else j=j+k+;
if(i==j) j++;
}
return (i<j)?i:j;
}
int main(){
cin>>n;
for(int i=;i<n;i++) cin>>s[i];
int l=Mini(n);
cout<<l<<endl;
return ;
}

最新文章

  1. 对 Serializable和Parcelable理解
  2. js replaceAll
  3. chrome调试hove等类似事件
  4. 在docker里面安装部署应用
  5. 十大技巧快速提升原生APP开发性能
  6. 【linux程序设计4th】第三章1
  7. 配置mybatis流程
  8. OpenGL光源位置
  9. 设计模式之装饰者模式(Decorator Pattern)
  10. 【转】Android JNI编程—JNI基础
  11. NuGet学习笔记(1)——初识NuGet及快速安装使用(转)
  12. 系统学下POWERSHELL吧,工作当中可能用得到呢。不能像以前那样修修改改了。
  13. python高级编程之超类02:super的缺陷
  14. firebug登陆之数据包分析
  15. 转:loadruner报错:Step download timeout(120 seconds)的一个解决方法
  16. 微信小程序-开发入门
  17. 如何通过java反射的方式对java私有方法进行单元测试
  18. 【Codeforces Round 431 (Div. 2) A B C D E五个题】
  19. java1.8十大新特性详解
  20. 【BZOJ4030】[HEOI2015]小L的白日梦

热门文章

  1. Spring Tool Suit安装virgo server插件、virgo的下载
  2. swift 动态设置UILabel的高度
  3. BestCoder Round #11 (Div. 2)
  4. 基于express+redis高速实现实时在线用户数统计
  5. JAVA并发-为现有的线程安全类添加原子方法
  6. jQuery插件开发初探
  7. Pocket英语语法---一、形容词性物主代词和名词性物主代词
  8. Canny边缘检测及C++实现
  9. 11.ng-init
  10. Redis封装之List