洛谷P1709 [USACO5.5]隐藏口令Hidden Password
P1709 [USACO5.5]隱藏口令Hidden Password
題目描述
有時(shí)候程序員有很奇怪的方法來隱藏他們的口令。Binny會選擇一個(gè)字符串S(由N個(gè)小寫字母組成,5<=N<=5,000,000),然后他把S順時(shí)針繞成一個(gè)圈,每次取一個(gè)做開頭字母并順時(shí)針依次取字母而組成一個(gè)字符串。這樣將得到一些字符串,他把它們排序后取出第一個(gè)字符串。把這個(gè)字符串的第一個(gè)字母在原字符串中的位置-1做為口令。
如字符串a(chǎn)labala,按操作的到7個(gè)字符串,排序后得:
aalabal
abalaal
alaalab
alabala
balaala
laalaba
labalaa
第一個(gè)字符串為aalabal,這個(gè)a在原字符串位置為7,7-1=6,則6為口令。
輸入輸出格式
輸入格式:?
第一行:一個(gè)數(shù):N
第二行開始:字符串:S(每72個(gè)字符一個(gè)換行符)
?
輸出格式:?
一行,為得到的口令
?
輸入輸出樣例
輸入樣例#1:?復(fù)制 7 anabana 輸出樣例#1:?復(fù)制 6說明
題目滿足:
30%的數(shù)據(jù)n<=10000
70%的數(shù)據(jù)n<=100000
100%的數(shù)據(jù)n<=5000000
時(shí)限 1s
題目翻譯來自NOCOW。
USACO Training Section 5.5
//20170523新增數(shù)據(jù)四組
#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++){//枚舉起點(diǎn) 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分 貪心?
轉(zhuǎn)載于:https://www.cnblogs.com/thmyl/p/7799198.html
總結(jié)
以上是生活随笔為你收集整理的洛谷P1709 [USACO5.5]隐藏口令Hidden Password的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 由于权限引起的Tomcat中项目某些页面
- 下一篇: 【JZOJ4307】喝喝喝