DigitalArts 2012 B - Password
問題原文
解法
与えられたパスワードと同じものはダメ
というのが少し面倒。
2種類正解候補を考えられればどちらかは必ず答えになりうる。
ということで、できるだけ z に近いものを使う場合のパスワード
と できるだけ a に近いものを使う場合のパスワード
を計算した。
実装
ほくほく。
S = input() P = sum([ord(s) - ord('a') + 1 for s in S]) # できるだけ z に近いものを使うように cnt = 0 P1 = P ans1 = [] while P1 and cnt < 20: p = min(P1, 26) ans1.append(p) P1 -= p cnt += 1 # できるだけ a に近いものを使うように cnt = 0 P2 = P ans2 = [] while P2 and cnt < 20: p = max(1, P2 - 26 * (20 - cnt - 1)) ans2.append(p) P2 -= p cnt += 1 ans1 = ''.join([chr(ord('a') + a - 1) for a in ans1]) ans2 = ''.join([chr(ord('a') + a - 1) for a in ans2]) if P1 == 0 and ans1 != S: print(ans1) elif P2 == 0 and ans2 != S: print(ans2) else: print('NO')
感想
推定水diffらしい。令和ABCで出たら半分は通しそう。
もっとうまい方法あったら教えてください。