洛谷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<cstdio>
#include<cstring>
using namespace std;
int n,ans;
string s,ss,snow;
int main(){
    freopen("Cola.txt","r",stdin);
    scanf("%d",&n);
    int tim=n/72;
    if(n/72*72!=n)tim++;
    for(int i=1;i<=tim;i++){
        cin>>ss;
        s+=ss;
    }
    s+=s;
    snow=s.substr(0,n);
    for(int i=1;i<n;i++){//枚举起点
        for(int j=i,cnt=0;cnt<n;cnt++,j++){
            if(snow[cnt]==s[j])continue;
            if(snow[cnt]<s[j])break;
            if(snow[cnt]>s[j]){
                snow=s.substr(i,n);
                ans=i;
                break;
            }
        }
    }
    cout<<ans;
}

93分 暴力

#include <bits/stdc++.h>
using namespace std;
const int maxn=5000110;
int n;
char s[maxn*2];
int Mini(int l){
    int i,j,k;
    i=0;j=1;k=0;
    while(i<l&&j<l){
        k=0;
        while(s[i+k]==s[j+k]&&k<l) k++;
        if(k==l)return (i<j)?i:j;
        if(s[i+k]>s[j+k])i=i+k+1;
        else j=j+k+1;
        if(i==j)j++;
    }
    return (i<j)?i:j;
}
int main(){
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>s[i];
        s[i+n]=s[i];
    }
    int l=Mini(n);
    cout<<l<<endl;
    return 0;
}

100分 贪心

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

洛谷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

洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N x N 的方格.输入数据中包括有树的方格的列表.你的任务是计算并输出,在他的农场中,不需要砍树却能够修建的最大正方形牛棚.牛棚的边必须和水平轴或者垂直轴平行. EXAMPLE 考虑下面的方格,它表示农夫约翰的农场,‘.'表示没有树的方格,‘#'表示有树的方格 1 2 3 4 5 6 7 8 1 .

洛谷 P1560 [USACO5.2]蜗牛的旅行Snail Trails(不明原因的scanf错误)

P1560 [USACO5.2]蜗牛的旅行Snail Trails 题目描述 萨丽·斯内尔(Sally Snail,蜗牛)喜欢在N x N 的棋盘上闲逛(1 < n <= 120). 她总是从棋盘的左上角出发.棋盘上有空的格子(用“.”来表示)和B 个路障(用“#”来表示). 下面是这种表示法的示例棋盘: 萨丽总是垂直(向上或者向下)或水平(向左或者向右)地走.她可以从出发地(总是记作A1 )向下或者向右走.一旦萨丽选定了一个方向,她就会一直走下去.如果她遇到棋盘边缘或者路障,她就停下来,并且

洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn

P2701 [USACO5.3]巨大的牛棚Big Barn 题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N x N 的方格.输入数据中包括有树的方格的列表.你的任务是计算并输出,在他的农场中,不需要砍树却能够修建的最大正方形牛棚.牛棚的边必须和水平轴或者垂直轴平行. EXAMPLE 考虑下面的方格,它表示农夫约翰的农场,‘.'表示没有树的方格,

洛谷——P2701 [USACO5.3]巨大的牛棚Big Barn

P2701 [USACO5.3]巨大的牛棚Big Barn 题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N x N 的方格.输入数据中包括有树的方格的列表.你的任务是计算并输出,在他的农场中,不需要砍树却能够修建的最大正方形牛棚.牛棚的边必须和水平轴或者垂直轴平行. EXAMPLE 考虑下面的方格,它表示农夫约翰的农场,‘.'表示没有树的方格,

洛谷 P2747 [USACO5.4]周游加拿大Canada Tour

P2747 [USACO5.4]周游加拿大Canada Tour 题目描述 你赢得了一场航空公司举办的比赛,奖品是一张加拿大环游机票.旅行在这家航空公司开放的最西边的城市开始,然后一直自西向东旅行,直到你到达最东边的城市,再由东向西返回,直到你回到开始的城市.除了旅行开始的城市之外,每个城市只能访问一次,因为开始的城市必定要被访问两次(在旅行的开始和结束). 当然不允许使用其他公司的航线或者用其他的交通工具. 给出这个航空公司开放的城市的列表,和两两城市之间的直达航线列表.找出能够访问尽可能多的

洛谷 P1345 [USACO5.4]奶牛的电信Telecowmunication

P1345 [USACO5.4]奶牛的电信Telecowmunication 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相连,a2与a3相连,等等,那么电脑a1和a(c)就可以互发电邮. 很不幸,有时候奶牛会不小心踩到电脑上,农夫约翰的车也可能碾过电脑,这台倒霉的电脑就会坏掉.这意味着这台电脑不能再发送电邮了,于是与这台电脑相关的连接也就不可

洛谷 P2742 [USACO5.1]圈奶牛Fencing the Cows

题目描述 农夫约翰想要建造一个围栏用来围住他的奶牛,可是他资金匮乏.他建造的围栏必须包括他的奶牛喜欢吃草的所有地点.对于给出的这些地点的坐标,计算最短的能够围住这些点的围栏的长度. 输入输出格式 输入格式: 输入数据的第一行包括一个整数 N.N(0 <= N <= 10,000)表示农夫约翰想要围住的放牧点的数目.接下来 N 行,每行由两个实数组成,Xi 和 Yi,对应平面上的放牧点坐标(-1,000,000 <= Xi,Yi <= 1,000,000).数字用小数表示. 输出格式