旺崽的博客

要么天赋异禀,要么天道酬勤

0%

2021牛客寒假算法基础集训营3 H.数字串

2021牛客寒假算法基础集训营3 H.数字串

题目链接

题目描述

牛牛发现了一种方法可以将只包含小写字母的字符串按照以下方式使其转换成一个数字串:
取其中的每个字母,$\mathit a$ 转换为 $\text 1$,$\mathit b$ 转换为 $\text 2……\mathit z$ 转换为 $\text 26$,然后将这些数字拼接起来。
例如,$\mathit abcz$ 可以转换为 $\text 12326$。
现在给出一个只包含小写字母的字符串 $\mathit S$,你需要找到一个只包含小写字母的字符串 $\mathit T$,使得两个串不相同但是能转换成相同的数字串。

输入描述:

一行一个长度不超过 $10^{6}$ 的小写字母字符串 $\mathit S$。

输出描述:

一行一个长度不超过 $2×10^{6}$ 的小写字母字符串 $\mathit T$。
如果无解,请输出 $\text -1$。
如果答案有解且你输出的字符串包含了除了小写字母以外的字符或长度超过了 $2×10^{6}$,那么你会得到“答案错误”的返回结果。
否则如果答案有解且你的答案与输入的字符串可以转换为一样的数字串,那么你的答案会被认为是正确的。

示例1

输入

1
cwc

输出

1
cbcc

示例2

输入

1
ccc

输出

1
-1

ACM 的同仁们可以多了解一下 py,针对字符串类 py 提供了大量现成的函数,非常方便,拿这题举例,我们很容易发现替换其实就是以下几种情况:

  • $aa<->k$
  • $ab<->l$
  • $ac<->m$
  • $\cdots$
  • $bf<->z$

也就是说我们只需要把上述情况都试一遍,如果替换之后都和原串一样,直接输出 $-1$ 即可,如果替换之后和原串不一样就是正确答案,注意 $t$ 这个字符对应的 $20$ 无法转换成两个字符,特判掉即可,上述的替换在 py 里直接有一个 replace 函数,AC代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import sys

s = input()
for i in range(11, 27):
if i == 20:
continue
a = s.replace(chr(97 + i - 1), chr(97 + i // 10 - 1) + chr(97 + i % 10 - 1))
if a != s:
print(a)
sys.exit(0)
a = s.replace(chr(97 + i // 10 - 1) + chr(97 + i % 10 - 1), chr(97 + i - 1))
if a != s:
print(a)
sys.exit(0)
print(-1)