zoukankan      html  css  js  c++  java
  • UVA-1584 Circular Sequence(环形字典序比较)

     看到环形,首先想到乘两倍拆成线性;

    对于这种固定长度的子串比较,对每一个子串,可以考虑通过第一个字符的位置进行标记。

    还有UVA竟然禁止用gets,所以此题只能用fgets,记住fgets会把行末回车读进来,所以算长度的时候应该-1;

     1 #include "bits/stdc++.h"
     2 using namespace std;
     3 const int MAX=205;
     4 int t,ls,ans;
     5 char s[MAX];
     6 bool check(int x,int y){
     7     int i,j;
     8     for (i=0;i<ls;i++){
     9         if (s[x+i]!=s[y+i])
    10             return s[x+i]<s[y+i];
    11     }
    12 }
    13 int main(){
    14     freopen ("circular.in","r",stdin);
    15     freopen ("circular.out","w",stdout);
    16     int i,j;
    17     scanf("%d
    ",&t);
    18     while (t--){
    19         fgets(s+1,105,stdin);
    20         ls=strlen(s+1)-1;ans=1;
    21         for (i=1;i<=ls;i++)
    22             s[i+ls]=s[i];
    23         for (i=2;i<=ls;i++)
    24             if (check(i,ans))
    25                 ans=i;
    26         for (i=0;i<ls;i++)
    27             putchar(s[i+ans]);
    28         putchar('
    ');
    29     }
    30     return 0;
    31 }
  • 相关阅读:
    水仙花数
    Edge browser hosts file
    tt0034583
    JavaScript中的面向对象
    滚动
    无缝滚动
    MySQL(一)
    JavaScript 精粹
    MYSQL新手入门篇
    用github来展示你的前端页面吧
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/13834220.html
Copyright © 2011-2022 走看看