码迷,mamicode.com
首页 > 其他好文 > 详细

cogs 915. 隐藏口令

时间:2017-12-24 11:11:29      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:ram   form   tput   字符串长度   stdin   log   def   字母   文件   

915. 隐藏口令

★★☆   输入文件:hidden.in   输出文件:hidden.out   简单对比
时间限制:1 s   内存限制:128 MB

USACO/hidden(译 by Felicia Crazy)

描述

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

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

aalabal
abalaal
alaalab
alabala
balaala
laalaba
labalaa

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

PROGRAM NAME: hidden

INPUT FORMAT

第一行:一个数:L

第二行:字符串:S

SAMPLE INPUT (file hidden.in)

7
alabala

OUTPUT FORMAT

一行,为得到的口令

 

SAMPLE OUTPUT (file hidden.out)

6 

/*
    最小表示法模板题
    字符串的最小表示法,就是对于一个字符串,可以将它的最后一位放到第一位来,依次类推,一共有n种变形,n为字符串长度 
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n;
string s;
int getmin(){
    int i=0,j=1,k=0,t;
    while(i<n && j<n && k<n){
        t=s[(i+k)%n]-s[(j+k)%n];
        if (!t) k++;
        else{
            if (t>0) i+=k+1;
            else j+=k+1;
            if (i==j) j++;
            k=0;
        }
    }
    return i<j?i:j;
}
int main(){
    freopen("hidden.in","r",stdin);freopen("hidden.out","w",stdout);
    scanf("%d",&n);
    string w;
    while(cin>>w)s=s+w;
    printf("%d",getmin());
}

 

cogs 915. 隐藏口令

标签:ram   form   tput   字符串长度   stdin   log   def   字母   文件   

原文地址:http://www.cnblogs.com/thmyl/p/8097385.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!