zoukankan      html  css  js  c++  java
  • Circular Sequence,ACM/ICPC Seoul 2004,UVa 1584

    #include <stdio.h>
    #include <string.h>
    #define maxn 105
    
    int lss(const char *s,int p,int q)
    {
        int i, stlen=strlen(s);
        for(i=0; i<stlen; i++)
            if(s[(p+i)%stlen] != s[(q+i)%stlen])
                return s[(p+i)%stlen] < s[(q+i)%stlen];
        return 0;
    }
    int main(void)
    {
        int n,ans,stlen,i;
        char carr[maxn];
        scanf("%d",&n);
        while(n--)
        {
            ans=0;
            scanf("%s",carr);
            stlen=strlen(carr);
            for(i=1; i<stlen; i++)
                if(lss(carr,i,ans))ans=i;
            for(i=0; i<stlen; i++)
                putchar(carr[(i+ans)%stlen]);
            putchar('
    ');
        }
        return 0;
    }
    

      

    求字典序的“最小表示”。

    ans表示最小下标,初始值为0,for循环,从1开始循环,依次比较前一个和后一个

    第一次 ans=0.i=1,即比较从0开始的字符串与从1开始的字符串那个字典序小,

    如果 lss(s,i,ans)则ans=i; //lss()函数返回是否后一个比前一个小,如果小,则将后一个坐标即i赋值给ans,使得ans 一直记录最小的字典序的开始下标。

    思路:

    找最小字典序,即从开始至最后依次比较,将其字串看成一个环,其下标%其字串长度即可进行循环

    ACAB

    ACAB 比较 CABA

    0123        123[0(4%4)]

    在主函数中循环,依次比较,利用自己写的函数(后一个小于前一个),则记录后一个下标。最后记录的是最小字典序的开始下标,然后输出即可

  • 相关阅读:
    websocket的理解&应用&场景
    如何设置winform程序图标
    Python简单爬虫爬取自己博客园所有文章
    分享一个自己做的SpringMVC的PPT
    2016校招薪资汇总
    2016阿里巴巴校招offer面经
    利用快排partition求前N小的元素
    几个面试经典算法题Java解答
    深入理解java垃圾回收机制
    深入理解JVM结构
  • 原文地址:https://www.cnblogs.com/A--Q/p/5691943.html
Copyright © 2011-2022 走看看