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;
}

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

时间: 2024-10-08 03:36:05

P1709 [USACO5.5]隐藏口令Hidden Password的相关文章

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

P1709 [USACO5.5]隐藏口令Hidden Password 题目描述 有时候程序员有很奇怪的方法来隐藏他们的口令.Binny会选择一个字符串S(由N个小写字母组成,5<=N<=5,000,000),然后他把S顺时针绕成一个圈,每次取一个做开头字母并顺时针依次取字母而组成一个字符串.这样将得到一些字符串,他把它们排序后取出第一个字符串.把这个字符串的第一个字母在原字符串中的位置-1做为口令. 如字符串alabala,按操作的到7个字符串,排序后得: aalabal abalaal a

[USACO5.5]隐藏口令Hidden Password

题目链接:传送门 题目大意:给你一个长度 N 的字符串,5<=N<=5,000,000,将首尾合并成环,断环成链并满足字典序最小,输出此时首字母在原串中的位置-1: 题目思路:最小表示法 #include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <algorithm> #include <cstring> #incl

[最小表示] zoj 1729 Hidden Password

题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=729 Hidden Password Time Limit: 2 Seconds      Memory Limit: 65536 KB Some time the programmers have very strange ways to hide their passwords. See for example how Billy "Hacker" G

[USACO5.5]Hidden Password

题目大意: 求字符串最小表示. 思路: 本来按照lbn187的课件,知道SAM可以求字符串最小表示. 然而他并没有提供例题,就自己找了一道做. 大体思想就是把字符串复制一遍接在后面,构建SAM,然后每次跑小的转移. 跑n次以后就跑到了最小表示的末尾,用该状态的len值减去n就是最小表示的起始位置. 然后交上去就MLE了. 看了网上的题解发现求最小表示有专门的做法,也是O(n)的,还特别简单,不知道比SAM妙到哪里去了. 核心思想就是设两个指针i和j,表示目前比较的循环串的开头位置. 再用k表示目

html中隐藏域hidden

基本语法: <input type="hidden" name="field_name" value="value"> 作用: 1 隐藏域在页面中对于用户是不可见的,在表单中插入隐藏域的目的在于收集或发送信息,以利于被处理表单的程序所使用.浏览者单击发送按钮发送表单的时候,隐藏域的信息也被一起发送到服务器. 2 有些时候我们要给用户一信息,让他在提交表单时提交上来以确定用户身份,如sessionkey,等等.当然这些东西也能用cook

zoj 1729 Hidden Password

Hidden Passwordhttp://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=729 Time Limit: 2 Seconds      Memory Limit: 65536 KB Some time the programmers have very strange ways to hide their passwords. See for example how Billy "Hacker" Geits hi

【USACO 5.5.2】Hidden Password

题目大意 给出从一个字符环,求从哪个位置断开后的字符串的字典序最小. 题解 不多说,一条模板题.就是后缀数组(或后缀树). 先把字符串倍长,后缀数组预处理(请看相关资料),扫一遍SA数组,找符合条件的即可. 代码 /* TASK:hidden LANG:C++ */ #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN = 200005;

解决IE6,IE7不能隐藏(overflow:hidden)绝对定位溢出的内容

IE6/IE7下父元素有相对/绝对定位时,子元素在IE6和IE7下overflow:hidden;失效,下面与大家分享下导致以上问题发生的情况及解决方法 令人蛋疼的IE,IE6/IE7下父元素有相对/绝对定位时,子元素在IE6和IE7下overflow:hidden;失效. 情况一:(在parent上增加position:relative) 代码如下: <style type="text/css"> .parent{ width:100px; height:100px;bo

UVa 1314 Hidden Password

方法:最小表示法 题意即求最小表示法,带入模版即可. code: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <iostream> 5 #include <string> 6 #include <vector> 7 #include <stack> 8 #include <bitset> 9 #includ