字母项链(necklace)

安徽省2011年信息学竞赛试题(小学组)

题目描述 Description

终于,卡卡西过关斩将,从芭比阿姨家摘得了自己所需要的所有的字母水晶珠,她捧着这些水晶珠,回到妈妈身边。妈妈高兴万分,摸着卡卡西的头说:“太棒了,宝贝,下面,你想不想学习一种特别的制作项链的方式呢?”卡卡西眨巴着水灵灵的大眼睛,好奇的问:“当然想啦,怎么特别呢?”,妈妈说:“这是一条很长而且独特的项链。这个项链需要由连接在一起的各种大小不同的字母水晶珠制成,珠子中间不用线穿过。这就意味着珠子可能在任意的地方断开。”随后,妈妈把制作方式告诉了卡卡西……卡卡西可以选择她想要的连续一段的珠子。但是做了不久她就发现了一个问题,相邻的字母水晶珠之间的连接并不是很好,可能会由于项链自身的重量而使得它断开。项链断开时情况会很糟糕。因此,断开的点很重要。如果前面是小的珠子,项链断裂的可能性要比前面是大珠子要大的多。爱动脑筋的卡卡西想要进一步测试项链的稳定性。所以她需要一个程序以便决定断开珠子的最坏的那个点。
字母水晶项链是由一串A = a1a2 … am序列组成,m表示制成项链的珠子的个数。当项链围成一圈时,最后一个字母am就是a1的前驱(前一个)。第i个珠子比第j个珠子更容易断裂就是说序列aiai+1 … ana1 … ai-1的字典序小于序列ajaj+1 … ana1 … aj-1的字典序。序列a1a2 … an的字典序小于序列b1b2 … bn的字典序就是存在一个整数i,i<=n, 对于每个j(1 <= j < i)都要有aj=bj且ai < bi。聪明的你能帮助卡卡西测试出项链的稳定性,完成她的生日梦想吗?

输入描述 Input Description

两行,第一行为一个正整数m(10≤m≤10000),表示组成项链的字母序长度,第二行为组成项链的字母序。每个珠子由一个英语的小写字母表示(a-z),a < b … z。

输出描述 Output Description

一行,项链最坏连接处字母珠子的编号。例如i,A[i]就是n个可能断裂点的字典序最小的地方。如果有不止一个的解,输出最小的i。

样例输入 Sample Input

11 amandamanda

样例输出 Sample Output

11

数据范围及提示 Data Size & Hint

20%的数据, 1≤m≤100
40%的数据, 1≤m≤1000
100%的数据, 1≤m≤10000

代码还是那么简单,我就不解释了,各位慢慢理解。
上代码:

#include<iostream>
using namespace std;
int m,mni;
string s,mn;

int main() {
    cin>>m>>s;
    mn=s;
    mni=0;
    for(int i=1;i<m;i++){
        string tmp=s.substr(i,m-i)+s.substr(0,i);
        if(mn>tmp){
            mn=tmp;
            mni=i;
        }
    }
    cout<<mni+1;
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值