zoukankan      html  css  js  c++  java
  • poj1509最小表示法

    题意:
          给你一个循环串,然后找到一个位置,使得从这个位置开始的整个串字典序最小。


    思路:

          最小表示法的建档应用,最小表示法很好理解,就点贪心的意思,一开始我们枚举两个起点i,j然后谁大谁往后移动,相等则比较下一个,这样到最后取一个小的值就行了,时间复杂度是O(n)的,很好的小方法。


    #include<stdio.h>
    #include<string.h>
    
    char str[10005];
    
    int GetMin(char *str)
    {
        int len = strlen(str);
        int i = 0 ,j = 1 ,k = 0;
        while(i < len && j < len && k < len)
        {
            int t = str[(i+k)%len] - str[(j+k)%len];
            if(!t) k ++;
            else
            {
                t > 0 ? i = i + k + 1 : j = j + k + 1;
                if(i == j) j ++;
                k = 0;
            }
        }
        return i < j ? i : j;
    }
    
    int main ()
    {
        int t;
        scanf("%d" ,&t);
        while(t--)
        {
            scanf("%s" ,str);
            printf("%d
    " ,GetMin(str)+1);
        }
        return 0;
    }
    


  • 相关阅读:
    linux:yum
    python:公共操作
    python 控制流程
    linux:lamp环境
    linux:nginx
    深圳:永安在线-安全
    linux:mysql
    linux:shell
    linux:项目上线
    linux:权限管理
  • 原文地址:https://www.cnblogs.com/csnd/p/12062417.html
Copyright © 2011-2022 走看看