Password
题意翻译
定义
$$ f(s) = \sum_{i \in s} \text{Num}(i) $$
其中 $s$ 为小写字母串,$\text{Num}(i)$ 指的是 $i$ 在小写字母表的位置。
给定 $s$,输出一个小写字母串 $t$ 使得 $f(t) = f(s)$。如果没有满足的 $t$,输出 `NO`。
题目描述
[problemUrl]: https://atcoder.jp/contests/digitalarts2012/tasks/digitalarts_2
セキュリティに興味がある高橋君は、デジタルアーツ株式会社に就職したい青年です。
そこで、高橋君は自分が運営するサービスであるAtCoderのセキュリティについて見なおしてみることにしました。
現在AtCoderのシステムでは、パスワードは $ 1 $ 文字以上 $ 20 $ 文字以下の英小文字のみとしています。
そして、文字列 $ s $ に対してハッシュ値( $ hash(s) $ )を求める以下の式があり、パスワードと入力した文字列に対して、それぞれこの式で算出したハッシュ値が一致すると、入力した文字列は正しいとみなします。
$ hash(s)\ =\ Num(c_1)\ +\ Num(c_2)\ +\ ...\ +\ Num(c_{N}) $ ($ c_i $ は文字列 $ s $ の $ i $ 番目の文字を意味する)
なお、上記の式の関数 $ Num() $ とは英小文字を数字に変換する関数で、$ Num( $`a`$ )\ =\ 1, $ $ Num( $`b`$ )\ =\ 2, $ $ ...., $ $ Num( $`z`$ )\ =\ 26 $ というように、`a` から `z` に対して順に $ 1 $ から $ 26 $ までの数字を返します。
高橋君は、このシステムではパスワードと違う文字列でも簡単にハッシュ値が一致してしまうことに気づきました。
例えば、文字列 `abc` のハッシュ値は、$ 1+2+3=6 $ となりますが、文字列 `bbb` のハッシュ値も $ 2+2+2=6 $ ですし、`f` も $ 6 $ になってしまいます。
高橋君は、現在使っているパスワードに対してどのような文字列が正しいパスワードとして認識されてしまうか知りたいです。
正しいパスワード以外で条件を満たすものを $ 1 $ つ出力しなさい。
条件を満たすものが複数ある場合は、どの文字列を出力しても構いません。
もし条件を満たすパスワードが存在しない場合は `NO` と出力しなさい。
なお、AtCoderのシステムで入力できるパスワードは $ 1 $ 文字以上 $ 20 $ 文字以下の英小文字のみなので、 答えとして出力する文字列もその条件をみたします。 入力は以下の形式で標準入力から与えられる。
> $ c_1c_2‥‥c_N $
- 入力には正しいパスワードを表す長さ $ N(1≦N≦20) $ の文字列が $ 1 $ 行で与えられる。
- 正しいパスワードの $ i $ 番目の文字を表す $ c_i $ は英小文字 (`a-z`) である。
与えられた正しいパスワードを表す文字列と等しいハッシュ値になる英小文字 $ 1 $ 文字以上 $ 20 $ 文字以下の文字列を、正しいパスワード以外のいずれか $ 1 $ つ出力せよ。
また、そのような文字列が存在しない場合は `NO` と出力せよ。
なお、出力は $ 1 $ 行のみとし、最後には改行を出力せよ。 ```
abc
```
```
bbb
```
- 問題文内に示しているように、ハッシュ値が $ 6 $ になります。
- 他にも `f` 、`aaaaaa` 、 `cc` でも構いません。
```
zzzzzzzzzzzzzzzzzzzz
```
```
NO
```
- 条件を満たす文字列は正しいパスワードしか存在しません。
```
abcdef
```
```
fedcba
```
- ハッシュ値は $ 21 $ になります。
```
k
```
```
bbbbba
```
```
aa
```
```
b
```
- ハッシュ値が $ 2 $ になる文字列は正しいパスワード以外に、`b` しかありません。