zoukankan      html  css  js  c++  java
  • 最强阵容

    5780: 最强阵容

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 206  解决: 54
    [提交][状态][讨论版][命题人:admin]

    题目描述

    拿着新换来的英雄卡,小李满心欢喜的准备和同学们PK一下。
    他们的游戏规则非常简单,双方把自己的牌绕成一圈,然后指定一个起点,从该张牌开始顺时针方向往后取,谁取出的字符串字典序更小(从左到右开始比较,碰到第一个不一样的字符进行比较,比较规则为a<b<…<z)谁将获得胜利。具体规则可参考样例。虽然现在小李的牌已经很好了,但是你能不能帮他快速算出起始位置,使得他能够派出最强阵容。
     

    输入

    第一行n(1<=n<=30000),表示共有n张牌。
    第二行共n个用一个空格隔开的小写字母,表示给定的一圈牌起始序列。
     

    输出

    仅一个整数,能获得最小字典序字符串的起点位置。如果有多个位置开始的字符串一样,则输出最小的那个位置,且第一个位置从1开始。

    样例输入

    4
    b c a b
    

    样例输出

    3
    

    提示

    四个位置取出的字符串分别为bcab,cabb,abbc,bbca,显然最小位置是3。

    ******************************************************************************************************************************************************************************************************

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    
    using namespace std;
    
    int main()
    {
        int n;
        char str[30005];
        scanf("%d",&n);
        //getchar();
        char x[50];
        for(int i=0;i<n;i++)   //读取
        {
            scanf("%s",x);
            str[i] = x[0];
            //str[i] = getchar();
            //getchar();
        }
        str[n] = '';
    
        int ans = 0;   //记录最小的答案
        for(int i=1;i<n;i++)
        {
            if(str[i]<str[ans])
                ans = i;
            else if(str[i]==str[ans]) //==
            {
                for(int j=ans+1,k = i+1,p=0;p<n;p++,j++,k++) //j是最小的下一位 k是当前遍历的下一位
                {
                    if(str[j%n]<str[k%n]) //原本最小位的字符串小
                    {
                        break;
                    }
                    else if(str[j%n]>str[k%n]) //当前位的字符串小
                    {
                        ans = i;
                        break;
                    }
                }
            }
        }
        printf("%d",ans+1);
    }

    //wa了很多次 开始用的n*n暴力解决 发现会超时 后来改成以上做法  但是用getchar()读入不知道为什么会错  改成scanf("%s")才A。

  • 相关阅读:
    【ybtoj】【Hash】回文子串
    Design Pattern:状态模式
    Design Pattern:装饰者模式
    Design Pattern:外观模式
    Design Pattern:适配器模式
    Design Pattern:模板方法模式
    Design Pattern:命令模式
    Design Pattern:观察者模式
    Design Pattern:复合模式
    Design Pattern:迭代器模式
  • 原文地址:https://www.cnblogs.com/hao-tian/p/8947285.html
Copyright © 2011-2022 走看看