Codeforces Problem 708A Letters Cyclic Shift

Posted shuoed

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Problem 708A Letters Cyclic Shift相关的知识,希望对你有一定的参考价值。

 题目链接:

http://codeforces.com/problemset/problem/708/A

题目大意:

从字符串s中挑选出一个子串(非空),将该子串中的每个字母均替换成前一个字母,如‘b‘换成‘a‘,‘c‘换成‘b‘,以此类推,特别的,‘a‘要换成‘z‘,问经过一次转换之后,字典序最小的字符串s为多少.注意“exactly one non-empty substring”这就意味着全‘a‘串也要变,即字符串"aaa",替换其中的字母(会使得字典序比原来大),但又要使字典序最小,所以只能将最后一个‘a‘->‘z‘==》字串变为“aaz”

解题思路:

代码可以解释解题思路

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 char s[100002];
 4 int main()
 5 {
 6     int i,k;
 7     while(~scanf("%s",s))
 8     {
 9         k=0;
10         for(i=0; s[i]!=\0; i++)
11             if(s[i]!=a)
12                 break;
13         for(; s[i]!=\0; i++)
14         {
15             if(s[i]==a)
16                 break;
17             s[i]--;
18             k++;
19         }
20         if(!k)
21             s[strlen(s)-1]=z;
22         puts(s);
23     }
24     return 0;
25 }

第一次 for 如果 s[i]!=a 则break,如果 s[i]==a 则不对原数组改变,向后扫描(有一个k作为标识)

第二次for 一直扫描到尾,如果 !=a  则让该字符 s[i]-- ,同时作为标识的 k++,如果==a 则说明 a之前的数据已经处理完毕,已处理完“字串”,break,即可

判断标识,输出结果

举三个例子:

1.

输入:codeforces 输出:bncdenqbdr 

k=0;i=0;

第一次 for

  s[0] != a; break;

第二次 for

   ---一直没有等于a 的则将每个数都s[i]--;k++

if(!k)--  //k为非0 不执行 if 语句

输出 s即可

2.

输入:abacaba 输出:aaacaba

k=0;i=0;

第一次 for s[0]==‘a‘; s[0]不变

     s[1]!=a; i=1;break;

第二次 for i=1

    s[1]!=a; s[1]--;k++; //s[1]-- 其值原为 ‘b‘ 减减为 ‘a’

    s[2]==a;break;//字串已处理结束,字串为“b”一个字符

if(!k)--  //k为非0 不执行 if 语句

输出 aaacaba

3.

输入:aaaa 输出:aaaz

k=0;i=0

第一次 for s[0]==‘a‘; s[0]不变

     s[1]==‘a’;  s[1] 不变

      ...

     s[4]==‘\0‘ 跳出循环

第二次 for i=4 ;s[4]!=‘\0‘;//循环失效,不执行循环体

if(!k)--  //k为0 执行 if 语句 s[sizof(s)-1]=‘z‘;//sizeof(s)=4,s[3]=‘z‘;

输出 aaaz;

 

以上是关于Codeforces Problem 708A Letters Cyclic Shift的主要内容,如果未能解决你的问题,请参考以下文章

CodeForces 1197 D Yet Another Subarray Problem

CodeForces 863D Yet Another Array Queries Problem 暴力

Frets On Fire --- 2019 Codeforces Global Round 2 Problem D

CodeForces - 868F Yet Another Minimization Problem

[题解]Yet Another Subarray Problem-DP 思维(codeforces 1197D)

Codeforces 868F. Yet Another Minimization Problem