zoukankan      html  css  js  c++  java
  • cogs 915. 隐藏口令

    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());
    }
  • 相关阅读:
    修复文件系统
    遗忘root密码,对密码进行重置
    grub引导程序破坏修复下
    模拟Grub引导故障上(配置文件损坏)
    模拟MBR故障修复
    RAID5 制作 (一个硬盘制作)
    RAID10 (硬盘制作)
    du,df区别
    07_软件的安装
    06_find-查找文件
  • 原文地址:https://www.cnblogs.com/thmyl/p/8097385.html
Copyright © 2011-2022 走看看