白駿2037メール
8482 ワード
質問する
右図のような携帯電話のキーボードがあります.このキーボードでプログラムを書くと、英語の情報を打つときに最小限の時間がかかります.
でも1番押すと空きがありますそしてACを打つなら、Aを打ってからしばらく待ってからCを打てばいいです.
文字を入力するには、ボタンを押す必要があります.ボタンを押すと、入力ボタンの文字が、ボタンを押すたびに次の文字に変換されます.例えば、2をA、2をB、3をCとする.連続してスペースを押すときは待たなくてもいいです.
入力
最初の行はpとwを与える.(1≦p,w≦1000)pはボタンを1回押すのに要する時間を示し,wはACと同じ数字の文字を連続して撮影するのを待つ時間を示す.次に、2行目に書く文字列が表示されます.ただし、文字列の長さは1000未満であり、一番前と一番後ろにスペースがないと仮定できます.文字列は大文字とスペースのみで構成されます.
しゅつりょく
最初の行にメッセージを書くのに要する時間を出力します.
入力例1
2 10
ABBAS SALAM
サンプル出力1
72
解法
まず,キーのリストでは,そのボタン上の文字を文字列で囲んで生成する.
前のキーを表す変数prev
は、意味のない文字に初期化される.
文字列の各文字を繰り返し入力します.
各キーのリストで各キーを繰り返します.
現在の文字がキーにある場合、前の文字もキーにあります.
両方が空白文字の場合、pが蓄積されます.
そうでなければ、wを蓄積し、キーのsの位置インデックスに1を加え、pを乗じて蓄積する.
前の文字と現在の文字が1つのキーで重複していない場合、そのキーの現在の文字の位置に1を加算し、p累積を乗算します.
繰り返し終了するたびに、前の文字が現在の文字に更新されます.
2番目のプールは、入力した文字列を1文字ずつ繰り返す仕上げです.
現在の文字が空白の場合、pが直接蓄積されます.
そうでなければ、キーのリストを繰り返します.このリストには空白の字が落ちている.
繰り返しの場合、現在の文字がキーの文字列に存在する場合、その文字の位置に1を加え、p累積を乗算します.
ここで、前の文字が現在のキーに存在する場合、wもさらに蓄積される.
現在の文字が置かれているキーが見つかり、重複文を終了します.
古いテキストを現在のテキストに更新します.
コード1
p, w = map(int, input().split())
S = input()
keys = [' ', 'ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ']
result = 0
prev = '_'
for s in S:
for key in keys:
if s in key and prev in key:
if s == key == ' ':
result += p
else:
result += w
result += (key.index(s) + 1) * p
break
elif s in key:
result += (key.index(s) + 1) * p
break
prev = s
print(result)
コード2
p, w = map(int, input().split())
S = input()
keys = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ']
result, prev = 0, '_'
for s in S:
if s == ' ':
result += p
else:
for key in keys:
if s in key:
result += p * (key.index(s) + 1)
if prev in key:
result += w
break
prev = s
print(result)
白駿2037メール
Reference
この問題について(白駿2037メール), 我々は、より多くの情報をここで見つけました
https://velog.io/@mynote/백준-2037-문자메시지
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
まず,キーのリストでは,そのボタン上の文字を文字列で囲んで生成する.
前のキーを表す変数
prev
は、意味のない文字に初期化される.文字列の各文字を繰り返し入力します.
各キーのリストで各キーを繰り返します.
現在の文字がキーにある場合、前の文字もキーにあります.
両方が空白文字の場合、pが蓄積されます.
そうでなければ、wを蓄積し、キーのsの位置インデックスに1を加え、pを乗じて蓄積する.
前の文字と現在の文字が1つのキーで重複していない場合、そのキーの現在の文字の位置に1を加算し、p累積を乗算します.
繰り返し終了するたびに、前の文字が現在の文字に更新されます.
2番目のプールは、入力した文字列を1文字ずつ繰り返す仕上げです.
現在の文字が空白の場合、pが直接蓄積されます.
そうでなければ、キーのリストを繰り返します.このリストには空白の字が落ちている.
繰り返しの場合、現在の文字がキーの文字列に存在する場合、その文字の位置に1を加え、p累積を乗算します.
ここで、前の文字が現在のキーに存在する場合、wもさらに蓄積される.
現在の文字が置かれているキーが見つかり、重複文を終了します.
古いテキストを現在のテキストに更新します.
コード1
p, w = map(int, input().split())
S = input()
keys = [' ', 'ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ']
result = 0
prev = '_'
for s in S:
for key in keys:
if s in key and prev in key:
if s == key == ' ':
result += p
else:
result += w
result += (key.index(s) + 1) * p
break
elif s in key:
result += (key.index(s) + 1) * p
break
prev = s
print(result)
コード2
p, w = map(int, input().split())
S = input()
keys = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQRS', 'TUV', 'WXYZ']
result, prev = 0, '_'
for s in S:
if s == ' ':
result += p
else:
for key in keys:
if s in key:
result += p * (key.index(s) + 1)
if prev in key:
result += w
break
prev = s
print(result)
白駿2037メールReference
この問題について(白駿2037メール), 我々は、より多くの情報をここで見つけました https://velog.io/@mynote/백준-2037-문자메시지テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol