zoukankan      html  css  js  c++  java
  • UVa 1584 Circular Sequence --- 水题

      UVa 1584

      题目大意:给定一个含有n个字母的环状字符串,可从任意位置开始按顺时针读取n个字母,输出其中字典序最小的结果

      解题思路:先利用模运算实现一个判定给定一个环状的串以及两个首字母位置,比较二者字典序大小的函数,

           然后再用一层循环,进行n次比较,保存最小的字典序的串的首字母位置,再利用模运算输出即可

    /* UVa 1584 Circular Sequence --- 水题 */
    #include <cstdio>
    #include <cstring>
    
    //字符串s为环状,p q为起始位置 长度都为n, 判断 p 是否小于 q
    int less(const char* s, int p, int q){
        int len = strlen(s);
        for (int i = 0; i < len; ++i){
            if (s[(p + i) % len] > s[(q + i) % len]){
                return -1;//p > q
            }
            else if (s[(p + i) % len] < s[(q + i) % len]){
                return 1;// q < q
            }
        }
        return 0; //相等
    }
    
    int main()
    {
        char s[105];
        int t;
        scanf("%d", &t);
        while (t--){
            scanf("%s", s);
            int ans = 0;
            int len = strlen(s);
            //相当于有n个串进行比较 挑出字典序最小的
            for (int i = 1; i < len; ++i){
                if (less(s, i, ans) == 1){
                    ans = i;
                }
            }
            //经过循环的选择 ans已经保存字典序最小的串的第一个字符的位置
            for (int i = 0; i < len; ++i){
                printf("%c", s[(ans + i) % len]);
            }
            printf("
    ");
    
    
        }//while(t)
    
        return 0;
    }
    View Code
  • 相关阅读:
    USACO提交方法
    洛谷 P1967 【货车运输】
    一本通 P1386 【打击犯罪】
    洛谷 P5767 【最优乘车】
    洛谷 P5658 【括号树】
    洛谷 P5657 【格雷码】
    洛谷 P2272 【最大半连通子图】
    二分图匈牙利算法
    最小生成树Kruskal算法
    觉得写出了抽象类和接口,以及概括了设计模式的宗旨
  • 原文地址:https://www.cnblogs.com/tommychok/p/5313908.html
Copyright © 2011-2022 走看看