P1709 [USACO5.5]隐藏口令Hidden Password

Posted Grary

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1709 [USACO5.5]隐藏口令Hidden Password相关的知识,希望对你有一定的参考价值。

P1709 [USACO5.5]隐藏口令Hidden Password

题目描述

有时候程序员有很奇怪的方法来隐藏他们的口令。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<iostream>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;

string str,jie;
string bi,maxl;
int pos;

int main(){
    int n,s=0;
    cin>>n;
    while(getline(cin,jie)&&s<=n){
        int len=jie.size();
        for(int i=0;i<len;++i)
            if(islower(jie[i]))
                str+=jie[i],s++;
    }
    maxl=str.substr(0,n);
    str+=str+str+str;
    for(int i=1;i<n;++i){
        bi=str.substr(i,n);
        if(bi<maxl)
            pos=i,maxl=bi;
    }
    printf("%d",pos);
    return 0;
}

速度很快的一个

#include<iostream>
#include<cstring>
#define N 5000005
using namespace std;

char s[N];
int n,ans;
int t[N];

int cat(int p,int q){
    for(register int i=0;i<n;i++)
        if(s[(p+i)%n]!=s[(q+i)%n])
            return s[(p+i)%n]<s[(q+i)%n];
    return 0;
}

int main(){
    std:ios::sync_with_stdio(false);
    cin>>n;int x=0;
    for(register int i=0;i<n;i++){
        cin>>s[i];
        t[i]++;
        if(s[i]==s[i-1])
            t[x]++,t[i]--;
        else x=i;
    }
    for(register int i=1;i<n;i++)
        if(t[i]!=0)
            if(cat(i,ans))
                ans=i;
    cout<<ans;
    return 0;
}

首先就是如果一个字母前面有比和他一样的,这个字母就不用了

以上是关于P1709 [USACO5.5]隐藏口令Hidden Password的主要内容,如果未能解决你的问题,请参考以下文章

[USACO5.5]隐藏口令Hidden Password

css 使用此代码可以使用Beaver Themer隐藏滚动状态下的行。将bdw-hide-scrolled类名分配给您想要hidde的行或模块

题解 [USACO5.5]贰五语言Two Five

[USACO5.5]Hidden Password

[USACO5.5] 矩形周长Picture

[USACO5.5]矩形周长Picture[扫描线+线段树]