最强阵容加强版
来源:互联网 发布:怎么看自己的淘宝信誉 编辑:程序博客网 时间:2024/04/29 00:10
题目描述
拿着新换来的英雄卡,小李满心欢喜的准备和同学们PK一下。
他们的游戏规则非常简单,双方把自己的牌绕成一圈,然后指定一个起点,从该张牌开始顺时针方向往后取,谁取出的字符串字典序更小(从左到右开始比较,碰到第一个不一样的字符进行比较,比较规则为a < b <…< z)谁将获得胜利。具体规则可参考样例。虽然现在小李的牌已经很好了,但是你能不能帮他快速算出起始位置,使得他能够派出最强阵容。
输入
第一行n,表示共有n张牌。
第二行共n个用一个空格隔开的小写字母,表示给定的一圈牌起始序列。
输出
仅一个整数,能获得最小字典序字符串的起点位置。如果有多个位置开始的字符串一样,则输出最小的那个位置,且第一个位置从1开始。
样例输入
4
b c a b
样例输出
3
提示
【样例说明】
四个位置取出的字符串分别为bcab,cabb,abbc,bbca,显然最小位置是3。
【数据规模】
30%的数据,1<=n<=10
60%的数据,1<=n<=1000
100%的数据,1<=n<=300000
#include<iostream>#include<cstdio>using namespace std;char a[1000005];int MinimumRepresentation(char *s, int l){ int i=0,j=1,k=0,t; while(i<l&&j<l&&k<l){ t=s[(i+k)>=l?i+k-l:i+k]-s[(j+k)>=l?j+k-l:j+k]; if(!t) k++; else{ if(t>0) i=i+k+1; else j=j+k+1; if(i==j) ++j; k=0; } } return (i<j?i:j); }int main(){ int n; scanf("%d\n",&n); int k=-1; while(k!=n){ char c; c=getchar(); if(c!=' '){ k++; a[k]=c; } if(k==n) break; } cout<<MinimumRepresentation(a,n)+1<<endl; return 0;}
阅读全文
0 0
- 最强阵容加强版
- 最强大的阵容
- JavaScript图书最强阵容
- 校园6美女向一男生表白 史上最强表白阵容来袭
- 聚中美顶尖研发力量,这是一份硅谷最强阵容的自动驾驶名单 | GAIR 硅谷智能驾驶峰会
- 刘邦阵容
- 平衡阵容
- 国米阵容
- 《东云宣武》阵容
- 全“明星”阵容
- 尤文新赛季阵容
- 加强版 X5
- Edit控件加强版
- 信封问题加强版
- LIS加强版
- GPS 数据格式加强版
- 加强版理发师问题
- 动物统计加强版
- ue4 c++ anim notify
- JDK并发包委婉
- Android图片加载框架最全解析(五),Glide强大的图片变换功能
- POJ1062(有限制的最短路)
- 下步计划
- 最强阵容加强版
- Android 8.0 HIDL
- javaweb实现手机APP注册
- Java后台框架篇--spring websocket 和stomp实现消息功能
- 总结MFC中OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别
- iOS kCGImageAlphaPremultipliedLast与kCGImageAlphaLast区别和联系
- android app从登录界面进入主页,按home键回桌面再进入app,重新弹出登录界面的问题解决
- 软件包管理器
- 社交系统ThinkSNS+从V0.8.7到V0.8.9我们到底修复了多少个bug?