zoukankan      html  css  js  c++  java
  • [题解]Codeforces Round #519

    【题目】

    C. Smallest Word

    【描述】

    IA有一个由若干个'a'和'b'组成的字符串,IA可以翻转该字符串的任意长的前缀,IA想通过这样的操作得到一个字典序最小的字符串,求一种可能的翻转方案。输出是否翻转长度为k的前缀,k=1,2,...,n,n为该字符串长度。

    数据范围:1<=字符串长度<=1000

    【思路】

    为了把第m+1个字符挪到第1个位置并保持其他字符不动,可以翻转m长的和m+1长的前缀(先后顺序不影响结果)。于是,我们可以通过这样的操作把每一个'a'挪到最前面,最后就得到了前面全是'a'后面全是'b'的字符串,这当然是能得到的字典序最小的字符串。

    我们又发现,对于m长的前缀,如果翻转两次,相当于没有翻转,进一步,如果翻转偶数次相当于没有翻转,如果翻转奇数次就相当于翻转了一次。

    对字符串从前往后扫描,遇到'a'做一次上述操作(若第一个字符是'a'则不用动),就可以得到答案。

    【我的实现】

    复杂度:O(Lenth)

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstring>
     5 
     6 using namespace std;
     7 #define MaxN 1020
     8 
     9 char s[MaxN];
    10 int a[MaxN];
    11 
    12 int main()
    13 {
    14     int Len;
    15     int i;
    16     scanf("%s", s);
    17     Len = strlen(s);
    18     //cout << Len <<endl;
    19     memset(a, 0, sizeof(a));
    20     for(i = 0; i < Len; i++)
    21     {
    22         if(i > 0 && s[i] == 'a')
    23         {
    24             a[i-1]++;
    25             a[i]++;
    26         }
    27     }
    28     for(i = 0; i < Len; i++)
    29         printf("%d ", a[i] % 2);
    30     return 0;
    31 }
    View Code

    【评测结果】

  • 相关阅读:
    Python爬虫技术--基础篇--函数式编程(上篇)
    Python爬虫技术--基础篇--Python高级特性
    Python爬虫技术--基础篇--函数(下篇)
    Python爬虫技术--基础篇--函数(上篇)
    Python爬虫技术--基础篇--字典和集合
    Python爬虫技术--基础篇--列表和元组
    1013 数素数
    1012 数字分类
    1010 一元多项式求导
    1011 A+B 和 C
  • 原文地址:https://www.cnblogs.com/CQBZOIer-zyy/p/9873907.html
Copyright © 2011-2022 走看看