Time Limit: 2.5 sec / Memory Limit: 1024 MB
配点: 点
問題文
JOIG 国では JOIG 語が使用されており,JOIG 語では文字 A
, B
, C
, D
, E
, F
, G
, H
, I
, J
, K
, L
, M
, N
, O
の 種類の文字が用いられる.
来月 JOIG 国で開催されるタイピング大会では,JOIG 語で用いられる 種類の文字からなる長さ の文字列 を入力するのにかかる時間を競う.この大会では,参加者は以下の条件でタイピングを行う.
- 参加者は, 本の指を使ってタイピングをする.
- 参加者は, 種類の文字のキー つずつを 列に並べた,左右に細長いキーボードを使用する.なお,どの位置にどの文字のキーを配置するかは,各参加者が自由に決めることができる.
- 参加者は,文字列 の 文字目のキーをこの順に打つことによって文字列 を入力する.
この大会には 人が参加する予定である.参加者によってタイピングの能力は様々である. 番目 () の参加者は,タイピングに際して以下のような時間がかかる.
- 指の真下にあるキーを 回打つのに ミリ秒かかる.
- 指を つ左のキーの上に移動させるのに ミリ秒かかる.
- 指を つ右のキーの上に移動させるのに ミリ秒かかる.
文字列 および各参加者の情報が与えられるので,各参加者に対して,文字列 の最初の文字を打ち始めてから最後の文字を打ち終わるまでに最短何ミリ秒かかるかを求めるプログラムを作成せよ.
制約
- .
- は長さ の文字列である.
- の各文字は
A
,B
,C
,D
,E
,F
,G
,H
,I
,J
,K
,L
,M
,N
,O
のいずれかである. - .
- ().
- ().
- ().
- は整数である.
小課題
- ( 点) の各文字は
A
である,. - ( 点) の各文字は
A
,B
のいずれかである,. - ( 点) の各文字は
A
,B
,C
のいずれかである,. - ( 点) の各文字は
A
,B
,C
,D
,E
,F
,G
,H
のいずれかである,,. - ( 点) の各文字は
A
,B
,C
,D
,E
,F
,G
,H
のいずれかである,. - ( 点) の各文字は
A
,B
,C
,D
,E
,F
,G
,H
のいずれかである. - ( 点) .
- ( 点) ().
- ( 点) 追加の制約はない.
入力
入力は以下の形式で与えられる.
出力
行出力せよ. 行目 () には,参加者 が文字列 の最初の文字を打ち始めてから最後の文字を打ち終わるまでに最短何ミリ秒かかるかを出力せよ.
入力例 1Copy
6 ABAABB 1 100 150 210
出力例 1Copy
1110
例えば,キーボードの配列を左から順に ONMLKJIHGFEDCBA
とすることを考える.このとき,以下の表のような動作を行うことで, ミリ秒で文字列 ABAABB
を入力できる.
手順 | 動作 | 指の真下にあるキー | 時間(ミリ秒) |
---|---|---|---|
1 | A のキーを打つ | A | 100 |
2 | 指を つ左のキーの上に移動させる | A → B | 150 |
3 | B のキーを打つ | B | 100 |
4 | 指を つ右のキーの上に移動させる | B → A | 210 |
5 | A のキーを打つ | A | 100 |
6 | A のキーを打つ | A | 100 |
7 | 指を つ左のキーの上に移動させる | A → B | 150 |
8 | B のキーを打つ | B | 100 |
9 | B のキーを打つ | B | 100 |
上に挙げたキーボードの配列以外にも,文字列 ABAABB
を同じ時間で入力できるものはあるが,より短い時間で入力することはできない.よって を出力する.
この入力例は小課題 の制約を満たす.
入力例 2Copy
6 CBACAB 1 150 240 220
出力例 2Copy
2260
例えば,キーボードの配列を左から順に CABDEFGHIJKLMNO
とすることを考える.このとき,以下の表のような動作を行うことで, ミリ秒で文字列 CBACAB
を入力できる.
手順 | 動作 | 指の真下にあるキー | 時間(ミリ秒) |
---|---|---|---|
1 | C のキーを打つ | C | 150 |
2 | 指を つ右のキーの上に移動させる | C → A | 220 |
3 | 指を つ右のキーの上に移動させる | A → B | 220 |
4 | B のキーを打つ | B | 150 |
5 | 指を つ左のキーの上に移動させる | B → A | 240 |
6 | A のキーを打つ | A | 150 |
7 | 指を つ左のキーの上に移動させる | A → C | 240 |
8 | C のキーを打つ | C | 150 |
9 | 指を つ右のキーの上に移動させる | C → A | 220 |
10 | A のキーを打つ | A | 150 |
11 | 指を つ右のキーの上に移動させる | A → B | 220 |
12 | B のキーを打つ | B | 150 |
上に挙げたキーボードの配列以外でも,文字列 CBACAB
を同じ時間で入力できるものはあるが,より短い時間で入力することはできない.よって を出力する.
この入力例は小課題 の制約を満たす.
入力例 3Copy
20 AAAAAAAAAAAAAAAAAAAA 1 230000000 80000000 80000000
出力例 3Copy
4600000000
A
を 回打つことになるので,キーボードの配列にかかわらず,入力し終わるまでに最短で ミリ秒かかる.よって を出力する.
この入力例はすべての小課題の制約を満たす.
入力例 4Copy
7 EACHBAG 5 130 104 162 107 219 45 144 168 157 213 79 257 100000000000 100000000000 100000000000
出力例 4Copy
2078 1766 2465 2894 1600000000000
この入力例は小課題 の制約を満たす.
入力例 5Copy
19 JOIGCODINGCHALLENGE 5 1 1 1 100 200 200 225 111 111 123456789 987654321 987654321 31415926535 27182818284 27182818284
出力例 5Copy
48 7700 7494 30987654300 1385204334401
この入力例は小課題 の制約を満たす.