alexjercan/bugnet huggingface dataset:
財宝 (Treasures)

問題

盗賊の Anna と Bruno は大富豪の邸宅に忍び込み，財宝 1 から財宝 N までの N 個の財宝を見つけた．これらの財宝を Anna と Bruno で分配することになった．財宝のうちのいくつかを Anna が取り，残りの財宝のうちのいくつかを Bruno が取る．同じ財宝を 2 人が取ることはできない．Anna や Bruno は財宝を 1 個も取らなくてもよい．また，残った財宝は邸宅に残しておくので，2 人とも取らない財宝があってもよい．

それぞれの財宝には「市場価値」と「貴重度」という 2 つの値が定まっている．Anna が取った財宝の市場価値の合計と Bruno が取った財宝の市場価値の合計の差の絶対値が D 以下なら，Anna は公平だと思って満足する．一方，Bruno は，Anna より貴重度の大きい財宝が欲しいと思っている．

Anna が満足するように財宝を分配したときの，Bruno が取った財宝の貴重度の合計から Anna が取った財宝の貴重度の合計を引いた値の最大値を求めよ．

入力

入力は 1 + N 行からなる．

1 行目には，2 つの整数 N, D (1 ≤ N ≤ 30，0 ≤ D ≤ 1015) が空白を区切りとして書かれている．これは，財宝の個数が N 個であり，Anna が取った財宝の市場価値の合計と Bruno が取った財宝の市場価値の合計の差の絶対値が D 以下なら Anna が満足することを表す．

続く N 行のうちの i 行目 (1 ≤ i ≤ N) には，2 つの整数 Xi, Yi (0 ≤ Xi ≤ 1015，0 ≤ Yi ≤ 1015) が空白を区切りとして書かれている．これは，財宝 i の市場価値が Xi であり，貴重度が Yi であることを表す．

与えられる 5 つの入力データのうち，入力 1 では N ≦ 10 を満たす．また，入力 2 では D = 0 を満たす．

出力

Anna が満足するように財宝を分配したときの，Bruno が取った財宝の貴重度の合計から Anna が取った財宝の貴重度の合計を引いた値の最大値を 1 行で出力せよ．

入出力例

入力例 1

6 15
50 900
30 200
40 100
80 600
60 100
70 700

出力例 1

1200

入力例 2

5 0
0 1000000000000000
0 1000000000000000
1 1
1000000000000000 0
1000000000000000 0

出力例 2

2000000000000000

入出力例 1 においては，Anna が財宝 2 と財宝 3 と財宝 5 を取り，Bruno が財宝 1 と財宝 6 を取ると，取った財宝の市場価値の合計は Anna が 130，Bruno が 120 となり，差の絶対値 10 が D = 15 以下なので Anna は満足する．このとき，取った財宝の貴重度の合計は Anna が 400，Bruno が 1600 となり，Bruno が取った財宝の貴重度の合計から Anna が取った財宝の貴重度の合計を引いた値は 1200 となる．これが最大である．

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
鉄道旅行 (Railroad Trip)

JOI 国には N 個の都市があり，それぞれ 1, 2, . . . , N の番号が付けられている．また，鉄道が N − 1 本あり，それぞれ 1, 2, . . . , N − 1 の番号が付けられている．鉄道 i (1 ≤ i ≤ N − 1) は，都市 i と都市 i + 1 を双方向に結んでいる．

JOI 国の鉄道に乗車する方法として，紙の切符で乗車する方法と，IC カードで乗車する方法がある．

鉄道 i に紙の切符で乗車する場合の運賃は Ai 円である．

鉄道 i に IC カードで乗車する場合の運賃は Bi 円である．ただし，IC カードで鉄道 i に乗車するには，鉄道 i で使える IC カードを事前に購入しておく必要がある．鉄道 i で使える IC カードを購入するには Ci 円かかる．一度購入した IC カードは，何度でも使用することができる．

IC カードの方が金額の処理が簡単になるため，IC カードで乗車する場合の運賃の方が紙の切符で乗車する場合の運賃よりも安い．すなわち， i = 1, 2, . . . , N − 1 に対して， Ai > Bi が成り立つ．IC カードの仕様は鉄道ごとにすべて異なるため，どの i に対しても，鉄道 i で使える IC カードを他の鉄道で使用することはできない．

あなたは，JOI 国じゅうを旅行することにした．都市 P1 から出発し，P2, P3, . . . , PM の順に都市を訪れる予定である．旅行は M − 1 日間の行程からなる．j 日目 (1 ≤ j ≤ M − 1) に都市 Pj から都市 Pj+1 に鉄道で移動する．この際，いくつかの鉄道を乗り継いで移動することもある．また，同じ都市を二度以上訪れることがあるかもしれない．JOI 国の鉄道は速いので，どの都市からどの都市へも 1 日で移動することができる．

あなたは現在，どの鉄道の IC カードも持っていない．あなたは，あらかじめ，いくつかの鉄道の IC カー
ドを購入し，この旅行にかかる金額，すなわち，IC カード購入費用と乗車した鉄道の運賃の和をできるだけ少なくしたい．

課題

JOI 国の都市の数，旅行の行程，および JOI 国のそれぞれの鉄道の運賃と IC カードの価格が与えられる．このとき，旅行にかかる金額の最小値を求めるプログラムを作成せよ．

入力

標準入力から以下のデータを読み込め．

1 行目には，整数 N, M が空白を区切りとして書かれている．これらはそれぞれ，JOI 国に都市が N 個あり，旅行が M − 1 日間の行程からなることを表す.

2 行目には，M 個の整数 P1, P2, . . . , PM が空白を区切りとして書かれている．これらは，j 日目 (1 ≤ j ≤ M − 1) に都市 Pj から都市 Pj+1 に鉄道で移動することを表す．

続く N − 1 行のうちの i 行目 (1 ≤ i ≤ N − 1) には，3 つの整数 Ai, Bi, Ci が空白を区切りとして書かれている．これらはそれぞれ，鉄道 i に紙の切符で乗車したときの運賃が Ai 円，IC カードで乗車したときの運賃が Bi 円，鉄道 i で使える IC カードの金額が Ci 円であることを表す．

出力

標準出力に，旅行にかかる金額の最小値を円単位で表す整数を 1 行で出力せよ．

制限

すべての入力データは以下の条件を満たす．

2 ≤ N ≤ 100 000．

2 ≤ M ≤ 100 000．

1 ≤ Bi < Ai ≤ 100 000 (1 ≤ i ≤ N − 1)．

1 ≤ Ci ≤ 100 000 (1 ≤ i ≤ N − 1)．

1 ≤ Pj ≤ N (1 ≤ j ≤ M)．

Pj ≠ Pj+1 (1 ≤ j ≤ M − 1).

入出力例

入力例 1

4 4
1 3 2 4
120 90 100
110 50 80
250 70 130

出力例 1

550

この場合，旅行にかかる金額を最小にする方法は以下のとおりである．

鉄道 2 と鉄道 3 の IC カードを購入する．これには 80 + 130 = 210 円かかる．

1 日目に，都市 1 から都市 2 まで紙の切符を使って移動し，次に都市 2 から都市 3 まで IC カードを使って移動する．これには 120 + 50 = 170 円かかる．

2 日目に，都市 3 から都市 2 まで IC カードを使って移動する．これには 50 円かかる．

3 日目に，都市 2 から都市 3 まで IC カードを使って移動し，次に都市 3 から都市 4 まで IC カードを使って移動する．これには 50 + 70 = 120 円かかる．

このように移動すると，旅行にかかる金額の合計は 210 + 170 + 50 + 120 = 550 円となる．これが最小であるので，550 と出力する．

入力例 2

8 5
7 5 3 5 4
12 5 8
16 2 1
3 1 5
17 12 17
19 7 5
12 2 19
4 1 3

出力例 2

81

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
ケーキの切り分け２ (Cake 2)

JOI くんと IOI ちゃんは双子の兄妹である．JOI くんは最近お菓子作りに凝っていて，今日も JOI くんはケーキを焼いて食べようとしたのだが，焼きあがったところで匂いをかぎつけた IOI ちゃんが来たので 2人でケーキを分けることになった．

ケーキは円形である．ある点から放射状に切り目を入れ，ケーキを N 個のピースに切り分け，ピースに 1 から N まで反時計回りに番号をつけた．つまり，1 ≤ i ≤ N に対し，i 番目のピースは i − 1 番目と i + 1 番目のピースと隣接している (ただし 0 番目は N 番目，N + 1 番目は 1 番目とみなす) ．i 番目のピースの大きさは Ai だったが，切り方がとても下手だったので Ai はすべて異なる値になった．

図 1: ケーキの例 (N = 5, A1 = 2, A2 = 8, A3 = 1, A4 = 10, A5 = 9)

この N 個を JOI くんと IOI ちゃんで分けることにした．分け方は次のようにすることにした：

まず JOI くんが N 個のうちの好きな 1 つを選んで取る．

その後，IOI ちゃんからはじめて IOI ちゃんと JOI くんが交互に残りのピースを 1 つずつ取っていく．ただし，両隣のピースのうち少なくとも一方が既に取られているようなピースしか取ることができず，取れるピースが複数あるときは，IOI ちゃんはそのうち最も大きいものを選んで取り，JOI くんはそのうちで好きなものを選んで取ることができる．

JOI くんは，自分が最終的に取るピースの大きさの合計を最大化したい．

課題

ケーキのピースの数 N と，N 個のピースの大きさの情報が与えられたとき，JOI くんが取れるピースの大きさの合計の最大値を求めるプログラムを作成せよ．

入力

標準入力から以下の入力を読み込め．

1 行目には整数 N が書かれており，ケーキが N 個のピースに切り分けられていることを表す．

続く N 行のうちの i 行目 (1 ≤ i ≤ N) には整数 Ai が書かれており，i 番目のピースの大きさが Ai であることを表す．

出力

標準出力に，JOI くんが取れるピースの大きさの合計の最大値を表す整数を 1 行で出力せよ.

制限

すべての入力データは以下の条件を満たす．

1 ≤ N ≤ 2 000．

1 ≤ Ai ≤ 1 000 000 000．

Ai はすべて異なる．

入出力例

入力例 1

5
2
8
1
10
9

出力例 1

18

JOI くんは，次のようにピースを取るのが最適である．

JOI くんは 2 番目のピースを取る．このピースの大きさは 8 である．

IOI ちゃんは 1 番目のピースを取る．このピースの大きさは 2 である．

JOI くんは 5 番目のピースを取る．このピースの大きさは 9 である．

IOI ちゃんは 4 番目のピースを取る．このピースの大きさは 10 である．

JOI くんは 3 番目のピースを取る．このピースの大きさは 1 である．

最終的に，JOI くんが取ったピースの大きさの合計は，8 + 9 + 1 = 18 となる.

入力例 2

8
1
10
4
5
6
2
9
3

出力例 2

26

入力例 3

15
182243672
10074562
977552215
122668426
685444213
3784162
463324752
560071245
134465220
21447865
654556327
183481051
20041805
405079805
564327789

出力例 3

3600242976

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
JOI 公園 (JOI Park)

20XX 年に IOI 国で行われるオリンピックに備え，IOI 国にある JOI 公園を整備することになった．JOI公園には N 個の広場があり，広場には 1 から N の番号がついている．広場を繋ぐ M 本の道があり，道には 1 から M の番号がついている．道 i (1 ≤ i ≤ M) は広場 Ai と広場 Bi を双方向に繋いでおり，長さは Di である．どの広場からどの広場へもいくつかの道を辿って行くことができる．

整備計画では，まず，0 以上の整数 X を選び，広場 1 からの距離が X 以下であるような広場 (広場 1 を含む) どうしをすべて相互に地下道で結ぶ．ただし，広場 i と広場 j の距離とは，広場 i から広場 j に行くときに通る道の長さの和の最小値である．整備計画では地下道の整備コストに関する整数 C が定まっている．地下道の整備にかかるコストは C × X である．

次に，地下道で結ばれた広場どうしを結ぶ道をすべて撤去する．道の撤去にコストはかからない．最後に，撤去されずに残った道をすべて補修する．長さ d の道を補修するためにかかるコストは d である．整備計画実施前の JOI 公園には地下道はない．JOI 公園の整備にかかるコストの和の最小値を求めよ．

課題

JOI 公園の広場の情報と，地下道の整備コストに関する整数が与えられたとき，JOI 公園の整備にかかる
コストの和の最小値を求めるプログラムを作成せよ．

入力

標準入力から以下のデータを読み込め．

1 行目には，整数 N, M,C が空白を区切りとして書かれている．これは，広場が N 個，道が M 本あり，地下道の整備コストに関する整数が C であることを表す．

続く M 行のうちの i 行目 (1 ≤ i ≤ M) には，整数 Ai, Bi, Di が空白を区切りとして書かれている．これは，道 i が広場 Ai と広場 Bi を繋ぎ，長さが Di であることを表す．

出力

標準出力に，JOI 公園の整備にかかるコストの和の最小値を表す整数を 1 行で出力せよ．

制限

すべての入力データは以下の条件を満たす．

2 ≤ N ≤ 100 000．

1 ≤ M ≤ 200 000．

1 ≤ C ≤ 100 000．

1 ≤ Ai ≤ N (1 ≤ i ≤ M)．

1 ≤ Bi ≤ N (1 ≤ i ≤ M)．

Ai ≠ Bi (1 ≤ i ≤ M)．

(Ai, Bi) ≠ (Aj, Bj) および (Ai, Bi) ≠ (Bj, Aj) (1 ≤ i < j ≤ M)．

1 ≤ Di ≤ 100 000 (1 ≤ i ≤ M)．

与えられる入力データにおいては，どの広場からどの広場へもいくつかの道を辿ることにより行けることが保証されている．

入出力例

入力例 1

5 5 2
2 3 1
3 1 2
2 4 3
1 2 4
2 5 5

出力例 1

14

この入力例では，X = 3 として，広場 1 からの距離が 3 以下であるような広場 (広場 1, 広場 2, 広場 3) どうしをすべて相互に地下道で結んだとき，整備にかかるコストの和は 2 × 3 + 3 + 5 = 14 となる．これが最小値である．

入力例 2

5 4 10
1 2 3
2 3 4
3 4 3
4 5 5

出力例 2

15

この入力例では，X = 0 のとき整備にかかるコストの和が最小になる．

入力例 3

6 5 2
1 2 2
1 3 4
1 4 3
1 5 1
1 6 5

出力例 3

10

この入力例では，X = 5 としてすべての広場を相互に地下道で結んだとき，整備にかかるコストの和が最小になる．

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
舞踏会 (Ball)

IOI 王国では，王女である JOI 姫の誕生日を祝って舞踏会が開かれることになった．

舞踏会には N 人の貴族が参加する予定である．N は奇数である．貴族には 1 から N までの番号が付けられている．それぞれの貴族には踊りのうまさという整数が定められており，貴族 i (1 ≤ i ≤ N) の踊りのうまさは Di である．

舞踏会では JOI 姫を含む N + 1 人で 2 人ずつ組を作って踊る．IOI 王国では，上級者が初級者を補助できるように，伝統的に以下の方法で踊りの組を決定している．

最初に，N 人の貴族が 1 列に並ぶ．

列に並んでいる貴族が 1 人になるまで，以下の操作を繰り返す．

- 列の先頭から 3 人の貴族の踊りのうまさを調べる．

- その 3 人の貴族の中で，最も踊りのうまさが大きい貴族を A とおく．ただし，複数いる場合は，最も踊りのうまさが大きい貴族の中で，最も番号の小さい貴族 を A とおく．

- その 3 人の貴族の中で，最も踊りのうまさが小さい貴族を B とおく．ただし，複数いる場合は，最も踊りのうまさが小さい貴族の中で，最も番号の大きい貴族 を B とおく．

- A と B が列から抜けて組になる．

- 残った 1 人は列の最後尾に移動する．

最終的に残った 1 人が JOI 姫と組になる．

貴族 1 から貴族 M (1 ≤ M ≤ N − 2) の M 人の貴族については，すでに初期状態で列の何番目に並ぶのかが決まっている．残りの N − M 人の貴族の並び方は国王が自由に決めることができる．

JOI 姫は踊りを学んだばかりなので，国王は JOI 姫と組になる貴族の踊りのうまさをできるだけ大きくしたいと考えている．JOI 姫と組になる貴族の踊りのうまさとして考えられる最大値を求めよ．

課題

それぞれの貴族の踊りのうまさと，M 人の貴族の初期状態で並ぶ場所が与えられたとき，JOI 姫と組になる貴族の踊りのうまさとして考えられる最大値を求めるプログラムを作成せよ．

入力

標準入力から以下のデータを読み込め．

1 行目には，2 個の整数 N, M が空白を区切りとして書かれている．これは舞踏会に貴族が N 人参加し，列に並ぶ場所がすでに決まっている貴族が M 人いることを表す．

続く M 行のうちの i 行目 (1 ≤ i ≤ M) には，2 個の整数 Di, Pi が空白を区切りとして書かれている．これは貴族 i の踊りのうまさが Di で，貴族 i が初期状態で列の先頭から Pi 番目に並ぶことを表す．

続く N − M 行のうちの i 行目 (1 ≤ i ≤ N − M) には，整数 Di+M が書かれている．これは貴族 (i + M)の踊りのうまさが Di+M であることを表す．

出力

標準出力に，JOI 姫と組になる貴族の踊りのうまさとして考えられる最大値を表す整数を 1 行で出力せよ．

制限

すべての入力データは以下の条件を満たす．

3 ≤ N ≤ 99 999．

N は奇数である．

1 ≤ M ≤ N − 2．

1 ≤ Di ≤ 1 000 000 000 (1 ≤ i ≤ N)．

1 ≤ Pi ≤ N (1 ≤ i ≤ M)．

Pi ≠ Pj (1 ≤ i < j ≤ M)．

入出力例

入力例 1

7 3
5 2
5 5
8 6
6
2
8
9

出力例 1

8

初期状態では 3 人の貴族の並ぶ場所がすでに決まっている．

括弧内の数字は踊りのうまさを表す．左端が列の先頭である．

例えば，先頭から順に貴族 5，貴族 1，貴族 4，貴族 6，貴族 2，貴族 3，貴族 7 という順番に並んだ場
合を考える．

すべての貴族が並んだあとの配置

この場合，以下のように列が変化していく．

列の先頭の 3 人の貴族 (貴族 5，貴族 1，貴族 4) 中で，最も踊りのうまさが大きい貴族 4 と最も踊りのうまさが小さい貴族 5 が組になり，残った貴族 1 が最後尾に移動する．

次に，列の先頭の 3 人の貴族 (貴族 6，貴族 2，貴族 3) の中で，最も踊りのうまさが大きい貴族は貴族 6 と貴族 3 の 2 人であり，このうち番号の小さい貴族は貴族 3 である．また，列の先頭の 3 人の貴族のうち最も踊りのうまさが小さい貴族は貴族 2 である．貴族 3 と貴族 2 が組になり，残った貴族 6 が最後尾に移動する．

次に，列の先頭の 3 人の貴族 (貴族 7，貴族 1，貴族 6) の中で，最も踊りのうまさが大きい貴族 7 と最も踊りのうまさが小さい貴族 1 が組になり，残った貴族 6 が最後尾に移動する．

最終的に貴族 6 が残り，JOI 姫と組になる．貴族 6 の踊りのうまさは 8 である．この値が JOI 姫と組になる貴族の踊りのうまさとして考えられる最大値である．

列の変化の様子

入力例 2

3 1
5 3
5
5

出力例 2

5

どのような順番で並んでも，貴族 2 と JOI 姫が組になる．

入力例 3

7 2
32 4
27 6
37
41
41
30
27

出力例 3

37

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
城壁 (Rampart)

歴史学者である JOI 教授は，かつて存在した IOI 王国について研究している．

過去の調査によると，IOI 王国は縦 H 行，横 W 列のマスに区切られた長方形の形をしていた．IOI 王国の首都は，防衛のために城壁で囲われていた．

IOI 王国の首都を囲う城壁は次のような形をしている．城壁には大きさと呼ばれる値が定まっている．大きさ s (s ≥ 3) の城壁とは，s × s の正方形の領域から外周以外の (s − 2) × (s − 2) の正方形の領域を除いたものである．

調査によると，首都を囲う城壁の大きさは L 以上であった．また，IOI 王国のいくつかのマスには城壁が存在しなかったことがわかっている．

JOI 教授は，さらなる研究のために，城壁としてありうるものが何通りあるかを知りたい．

課題

IOI 王国の大きさと，城壁の大きさの最小値，城壁が存在しなかったことが分かっているマスの情報が与えられたとき，城壁としてありうるものは何通りあるかを求めるプログラムを作成せよ．

入力

標準入力から以下のデータを読み込め．

1 行目には，整数 H, W, L, P が空白を区切りとして書かれている．これは，IOI 王国は縦 H 行，横 W 列のマスに区切られた長方形の形をしており，城壁の大きさは L 以上であり，城壁が存在しなかったことがわかっているマスが P マス存在することを表す．

続く P 行のうちの i 行目 (1 ≤ i ≤ P) には，整数 Ai, Bi が空白を区切りとして書かれている．これは，IOI 王国の上から Ai 行目，左から Bi 列目のマスには城壁が存在しなかったことがわかっていることを表す．

出力

標準出力に，城壁としてありうるものは何通りあるかを表す整数を 1 行で出力せよ.

制限

すべての入力データは以下の条件を満たす．

1 ≤ H ≤ 4 000．

1 ≤ W ≤ 4 000．

3 ≤ L ≤ H かつ 3 ≤ L ≤ W．

0 ≤ P ≤ 100 000．

1 ≤ Ai ≤ H (1 ≤ i ≤ P)．

1 ≤ Bi ≤ W (1 ≤ i ≤ P)．

(Ai, Bi) ≠ (Aj, Bj) (1 ≤ i < j ≤ P)．

入出力例

入力例 1

5 5 3 2
2 2
4 3

出力例 1

4

この入力例の場合，城壁としてありうるものは以下の 4 通りが考えられる．ただし，× で示したマスは城壁が存在しなかったことがわかっているマスである．

入力例 2

7 8 4 3
2 2
3 7
6 5

出力例 2

13

入力例 3

4000 4000 1234 4
1161 3028
596 1892
3731 2606
702 1530

出力例 3

7050792912

問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。
科目選択 (Selecting Subjects)

問題

JOI 君は物理，化学，生物，地学，歴史，地理の 6 科目のテストを受けた．
それぞれのテストは 100 点満点で採点された．

JOI 君は物理，化学，生物，地学の 4 科目から 3 科目を選択し，歴史，地理の 2 科目から 1 科目を選択する．

テストの合計点が最も高くなるように科目を選ぶとき，
JOI 君の選んだ科目のテストの合計点を求めよ．

入力

入力は 6 行からなり，1 行に 1 つずつ整数が書かれている．

1 行目には JOI 君の物理のテストの点数 A が書かれている．

2 行目には JOI 君の化学のテストの点数 B が書かれている．

3 行目には JOI 君の生物のテストの点数 C が書かれている．

4 行目には JOI 君の地学のテストの点数 D が書かれている．

5 行目には JOI 君の歴史のテストの点数 E が書かれている．

6 行目には JOI 君の地理のテストの点数 F が書かれている．

書かれている整数 A, B, C, D, E, F はすべて 0 以上 100 以下である．

出力

JOI 君が選んだ科目のテストの合計点を 1 行で出力せよ．

入出力例

入力例 1

100
34
76
42
10
0

出力例 1

228

入力例 2

15
21
15
42
15
62

出力例 2

140

入出力例 1 では，JOI 君が物理，生物，地学，歴史の 4 科目を選ぶとき，テストの合計点が最高になる．

物理，生物，地学，歴史の点数はそれぞれ 100, 76, 42, 10 なので，選んだ科目のテストの合計点は 228 である．

入出力例 2 では，JOI 君が化学，生物，地学，地理の 4 科目を選ぶとき，テストの合計点が最高になる．

化学，生物，地学，地理の点数はそれぞれ 21, 15, 42, 62 なので，選んだ科目のテストの合計点は 140 である．

入出力例 2 では，JOI 君が物理，化学，地学，地理の 4 科目を選ぶ場合でも，選んだテストの合計点は 140 である．

情報オリンピック日本委員会作 『第 15 回日本情報オリンピック JOI 2015/2016 予選競技課題』
ゼッケンの交換 (Swapping Bibs)

問題

JOI 高校の N 人の生徒が東西に一列に並んでいる．列の西の端から i 番目の生徒が生徒 i である．それぞれの生徒は整数が 1 つ書かれたゼッケンを付けている．最初，生徒 i のゼッケンには整数 Ai が書かれている．

バトンが M 個あり，バトンには 1 から M までの番号が付けられている．k = 1, 2, ..., M に対し，以下の操作を行う．バトン k (2 ≦ k ≦ M) に関する操作は，バトン k - 1 に関する操作が終わってから行う．

先生がバトン k を生徒 1 に渡す．

バトンを受け取った生徒は，以下のルールに従ってバトンを渡す．

ルール：生徒 i がバトン k を受け取ったとする．

1 ≦ i ≦ N - 1 のとき: 生徒 i のゼッケンの整数を k で割った余りが，生徒 i + 1 のゼッケンの整数を k で割った余りよりも大きいとき，生徒 i と生徒 i + 1 がゼッケンを交換し，生徒 i は生徒 i + 1 にバトンを渡す．そうでないときは，ゼッケンを交換せずに，生徒 i は生徒 i + 1 にバトンを渡す．

i = N のとき: 生徒 N はバトンを先生に渡す．

先生が生徒 N からバトン k を受け取ったら，バトン k に関する操作は終わりである．

生徒のゼッケンに最初に書かれていた整数とバトンの個数 M が与えられたとき，先生が生徒 N からバトン M を受け取った後の，それぞれの生徒のゼッケンの整数を求めるプログラムを作成せよ．

入力

入力は 1 + N 行からなる．

1 行目には整数 N, M (1 ≦ N ≦ 100, 1 ≦ M ≦ 100) が空白を区切りとして書かれており，それぞれ生徒の人数とバトンの個数を表す．

続く N 行のうちの i 行目 (1 ≦ i ≦ N) には整数 Ai (1 ≦ Ai ≦ 1000) が書かれており，生徒 i のゼッケンに最初に書かれている整数 Ai を表す．

出力

出力は N 行からなる．i 行目 (1 ≦ i ≦ N) には，先生が生徒 N からバトン M を受け取った後の，生徒 i のゼッケンの整数を出力せよ．

入出力例

入力例 1

6 4
3
2
8
3
1
5

出力例 1

2
3
1
8
5
3

入力例 2

10 6
1
2
3
4
5
6
7
8
9
10

出力例 2

6
1
2
3
10
4
8
7
9
5

入出力例 1 では 6 人の生徒がいる．最初，生徒のゼッケンは順に 3， 2， 8， 3， 1， 5 である．バトンは 4 個ある．

バトン 1 に関する操作が終了した時点での生徒のゼッケンは順に 3， 2， 8， 3， 1， 5 である．

バトン 2 に関する操作が終了した時点での生徒のゼッケンは順に 2， 8， 3， 3， 1， 5 である．

バトン 3 に関する操作が終了した時点での生徒のゼッケンは順に 2， 3， 3， 1， 8， 5 である．

バトン 4 に関する操作が終了した時点での生徒のゼッケンは順に 2， 3， 1， 8， 5， 3 である．

情報オリンピック日本委員会作 『第 15 回日本情報オリンピック JOI 2015/2016 予選競技課題』
ロシアの旗 (Russian Flag)

問題

K 理事長はロシアで開催される IOI 2016 に合わせて旗を作ることにした．K 理事長はまず倉庫から古い旗を取り出してきた．この旗は N 行 M 列のマス目に分けられていて，それぞれのマスには白・青・赤のいずれかの色が塗られている．

K 理事長はこの旗のいくつかのマスを塗り替えてロシアの旗にしようとしている．ただし，この問題でいうロシアの旗とは以下のようなものである．

上から何行か (1 行以上) のマスが全て白で塗られている．

続く何行か (1 行以上) のマスが全て青で塗られている．

それ以外の行 (1 行以上) のマスが全て赤で塗られている．

K 理事長が古い旗をロシアの旗にするために塗り替える必要のあるマスの個数の最小値を求めよ．

入力

入力は 1 + N 行からなる．

1 行目には，2 つの整数 N, M (3 ≦ N ≦ 50, 3 ≦ M ≦ 50) が空白を区切りとして書かれている．これは，旗が N 行 M 列のマス目に区切られていることを表す．

続く N 行にはそれぞれ M 文字からなる文字列が書かれており，古い旗のマス目に塗られている色の情報を表す．N 行のうちの i 行目の j 文字目 (1 ≦ i ≦ N, 1 ≦ j ≦ M) は，古い旗のマス目の i 行目 j 列目のマスの色を表す 'W', 'B', 'R' のいずれかの文字である．
'W' は白，'B' は青，'R' は赤を表す．

出力

K 理事長が古い旗をロシアの旗にするために塗り替える必要のあるマスの個数の最小値を 1 行で出力せよ．

入出力例

入力例 1

4 5
WRWRW
BWRWB
WRWRW
RWBWR

出力例 1

11

入力例 2

6 14
WWWWWWWWWWWWWW
WBBBWWRRWWBBBW
WWBWWRRRRWWBWW
BWBWWRRRRWWBWW
WBBWWWRRWWBBBW
WWWWWWWWWWWWWW

出力例 2

44

入出力例 1 において，古い旗には下図のように色が塗られている．

下図において，'X' の書かれた 11 個のマスを塗り替える．

これにより下図のようなロシアの旗にすることができる．

11 個未満のマスを塗り替えることではロシアの旗にすることはできないため，11 を出力する．

入出力例 2 においては，古い旗には下図のように色が塗られている．

情報オリンピック日本委員会作 『第 15 回日本情報オリンピック JOI 2015/2016 予選競技課題』
JOI国のお散歩事情 (Walking in JOI Kingdom)

問題

JOI 国には東西に走る 1 本の十分に長い道路がある．JOI 国の王宮が道路沿いにあり，JOI 国における道路沿いの位置は整数 A で表される．A = 0 のときは王宮の位置を表す．A > 0 のときは，王宮から東へ A メートル進んだ位置を表す．A < 0 のときは，王宮から西へ -A メートル進んだ位置を表す．

JOI 国の道路沿いには N 軒の家があり，家には西から順に 1 から N までの番号が付けられている．JOI 国には N 人の国民がいて，国民には 1 から N までの番号が付けられている．家 i には国民 i が住んでいる．家 i の位置は 0 でない偶数 Ai で表される．A1, ..., AN は全て異なる．

JOI 国では，近年国民の運動不足が問題になっている．国民の健康が気になった JOI 国の王様は，国民全員に散歩をする命令を出した．王様が命令を出すと，全ての国民は一斉に東向きまたは西向きに歩き始める．それぞれの国民がどちらの向きに歩き始めるかは，国民ごとに決まっている．全ての国民は，歩くときは 1 秒あたり 1 メートルの速度で歩く．

JOI 国の国民は皆おしゃべりが大好きである．散歩の途中にほかの国民に出会うと，その場所で立ち止まって世間話を始めてしまう．すでに立ち止まっている国民に出会った場合も同様である．一度立ち止まった国民は，再び歩き出すことはない．

JOI 国には Q 人の重要人物がいる．JOI 国の王様は，命令が出されてから T 秒後の，Q 人の重要人物の位置を把握しておきたい．命令が出されてから T 秒後の，Q 人の重要人物の位置を求めるプログラムを作成せよ．

入力

入力は，1 + N + Q 行からなる．

1 行目には，3 つの整数 N，T，Q (1 ≦ N ≦ 100000 (= 105), 0 ≦ T ≦ 1018, 1 ≦ Q ≦ 1000，1 ≦ Q ≦ N) が空白を区切りとして書かれている．これは，JOI 国に家が N 軒あり，王様が命令を出してから T 秒後の，Q 人の重要人物の位置を把握しておきたいことを表す．

続く N 行のうち i 行目には，2 つの整数 Ai, Di (-1018 ≦ Ai ≦ 1018, Ai は 0 でない偶数, 1 ≦ Di ≦ 2) が空白を区切りとして書かれている．Ai は家 i の位置を表す偶数である．すべての i (1 ≦ i ≦ N - 1) について，Ai < Ai+1 を満たす．Di は命令が出された後に国民 i が歩き始める方向を表す．Di = 1 のときは国民 i は東向きに歩き始める．Di = 2 のときは国民 i は西向きに歩き始める．

続く Q 行のうち i 行目には，整数 Xi (1 ≦ Xi ≦ N) が書かれている．これは，i 番目の重要人物が家 Xi に住んでいることを表す．すべての i (1 ≦ i ≦ Q - 1) について，Xi < Xi+1 を満たす．

与えられる 5 つの入力データのうち，入力 1 では N ≦ 100，T ≦ 10000を満たす．また，入力 2 では N ≦ 5000 を満たす．また，入力 3 では，ある整数 M (1 ≦ M ≦ N - 1) があって，すべての i (1 ≦ i ≦ M) について Di = 1，すべての j (M + 1 ≦ j ≦ N) について Dj = 2 を満たす．また，入力 1，2，3 では，入力に与えられる整数の絶対値は 1000000000 (= 109) を超えない．入力 4，5 では，与えられる整数が 32 ビット符号付き整数の範囲に収まらないことに注意せよ．

出力

出力は Q 行からなる．

i 行目 (1 ≦ i ≦ Q) には，王様が命令を出してから T 秒後の，i 番目の重要人物の位置を表す整数を出力せよ．この値が整数であることは，問題文の条件より保証されている．

入出力例

入力例 1

5 5 3
-8 1
-4 2
-2 2
4 2
10 1
1
3
5

出力例 1

-6
-6
15

入力例 2

7 18 5
-100 1
-56 2
-34 1
-30 1
-22 1
-4 2
18 2
1
3
4
5
7

出力例 2

-82
-16
-13
-13
0

情報オリンピック日本委員会作 『第 15 回日本情報オリンピック JOI 2015/2016 予選競技課題』
ゾンビ島 (Zombie Island)

問題

JOI 君が住んでいる島がゾンビに侵略されてしまった．JOI 君は島で一番安全な避難場所として設定されているシェルターに逃げ込むことにした．

JOI 君が住んでいる島は町 1 から町 N までの N 個の町からなり，町と町とは道路で結ばれている．島には M 本の道路があり，すべての道路は異なる 2 つの町を結んでいる．JOI 君は道路を双方向に自由に移動できるが，道路以外を通って町から別の町に行くことはできない．

いくつかの町はゾンビに支配されており，訪れることが出来ない．ゾンビに支配されている町から S 本以下の道路を使って到達できる町を危険な町という．それ以外の町を危険でない町という．

JOI 君の家は町 1 にあり，避難先のシェルターは町 N にある．町 1，町 N はゾンビに支配されていない．島の道路は移動するのに時間がかかるので，JOI 君は町を移動するたびに，移動先の町で一晩宿泊しなければならない．JOI 君は，危険でない町で宿泊する場合は宿泊費が P 円の安い宿に泊まるが，危険な町で宿泊する場合はセキュリティのサービスが優良な宿泊費が Q 円の高級宿に泊まる．JOI 君はできるだけ宿泊費が安くなるように移動して，町 N まで避難したい．町 1 や町 N では宿泊する必要はない．

JOI 君が 町 1 から町 N まで移動するときに必要な宿泊費の合計の最小値を求めよ．

入力

入力は 2 + K + M 行からなる．

1 行目には，4 つの整数 N, M, K, S (2 ≦ N ≦ 100000, 1 ≦ M ≦ 200000, 0 ≦ K ≦ N - 2, 0 ≦ S ≦ 100000) が空白を区切りとして書かれている．これは，島が N 個の町と M 本の道路からなり，N 個の町のうち K 個の町がゾンビに支配されており，ゾンビに支配されている町から S 本以下の道路を使って到達できる町を危険な町と呼ぶことを表す．

2 行目には，2 つの整数 P, Q (1 ≦ P ＜ Q ≦ 100000) が空白を区切りとして書かれている．これは，JOI 君が危険でない町では宿泊費が P 円の宿に泊まり，危険な町では宿泊費が Q 円の宿に泊まることを表す．

続く K 行のうちの i 行目 (1 ≦ i ≦ K) には，整数 Ci (2 ≦ Ci ≦ N - 1) が書かれている．これは，町 Ci がゾンビに支配されていることを表す．C1, ..., CK は全て異なる．

続く M 行のうちの j 行目 (1 ≦ j ≦ M) には，2 つの整数 Aj, Bj (1 ≦ Aj ＜ Bj ≦ N) が空白を区切りとして書かれている．これは，町 Aj と町 Bj との間に道路が存在することを表す．同じ (Aj, Bj) の組が 2 回以上書かれていることはない．

与えられる入力データにおいては，町 1 から町 N までゾンビに支配されていない町のみを通って移動できることが保証されている．

出力

JOI 君が町 1 から町 N まで移動するときに必要な宿泊費の合計の最小値を 1 行で出力せよ．

出力が 32 ビット符号付き整数の範囲に収まるとは限らないことに注意せよ．

入出力例

入力例 1

13 21 1 1
1000 6000
7
1 2
3 7
2 4
5 8
8 9
2 5
3 4
4 7
9 10
10 11
5 9
7 12
3 6
4 5
1 3
11 12
6 7
8 11
6 13
7 8
12 13

出力例 1

11000

入力例 2

21 26 2 2
1000 2000
5
16
1 2
1 3
1 10
2 5
3 4
4 6
5 8
6 7
7 9
8 10
9 10
9 11
11 13
12 13
12 15
13 14
13 16
14 17
15 16
15 18
16 17
16 19
17 20
18 19
19 20
19 21

出力例 2

15000

入出力例 1 は，以下の図に対応している．円は町を，線は道路を表す．

この場合，町 3，町 4，町 6，町 8，町 12 が危険な町である．

以下のような順番で町を移動すると，宿泊費の合計を最小にできる．

町 1 から町 2 に行く．町 2 で宿泊費が 1000 円の安い宿に宿泊する．

町 2 から町 5 に行く．町 5 で宿泊費が 1000 円の安い宿に宿泊する．

町 5 から町 9 に行く．町 9 で宿泊費が 1000 円の安い宿に宿泊する．

町 9 から町 10 に行く．町 10 で宿泊費が 1000 円の安い宿に宿泊する．

町 10 から町 11 に行く．町 11 で宿泊費が 1000 円の安い宿に宿泊する．

町 11 から町 12 に行く．町 12 で宿泊費が 6000 円の高級宿に宿泊する．

町 12 から町 13 に行く．町 13 では宿泊しない．

JOI 君がこのような経路で移動したとき，宿泊費の合計は 11000 円になるので，11000 を出力する．

情報オリンピック日本委員会作 『第 15 回日本情報オリンピック JOI 2015/2016 予選競技課題』
屋台 (Food stalls)

問題

JOI 君の住む IOI 市は，南北方向に H 区画，東西方向に W 区画の長方形の形をしており，H × W 個の区画に区切られている．北から i 番目，西から j 番目の区画を (i, j) と表す．現在，IOI 市で開催されている国際的なプログラミングコンテストを記念して，大規模なお祭りが開催されている．いくつかの区画には屋台が出ており，それぞれ違う種類のお菓子を販売している．
区画 (1, 1), 区画 (H, W) およびそれらに東西南北に隣接する区画には屋台はない．

JOI 君は区画 (1, 1) から区画 (H, W) に移動する．移動時間を短くするため，JOI 君は東あるいは南のみに移動を行う．JOI 君はお菓子が好きなので，区画に入るごとに順に次の行動をとる．

現在の区画にまだ買っていないお菓子を販売している屋台が出ている場合，その屋台でお菓子を購入する．

現在の区画の東西南北に隣接する区画にまだ買っていないお菓子を販売している屋台が出ている場合，それらの屋台のうち 1 つを除く全ての屋台から販売員を呼んで，お菓子を購入する．

JOI 君は同じ種類のお菓子を複数回購入することはない．

IOI 市の大きさ，屋台の位置と，それぞれの屋台のお菓子の値段が与えられたとき，JOI 君が区画 (1, 1) から区画 (H, W) に移動する間に購入するお菓子の総額の最小値を求めよ．

入力

入力は 1 + H 行からなる．

1 行目には，2 つの整数 H, W (3 ≦ H ≦ 1000, 3 ≦ W ≦ 1000) が空白を区切りとして書かれている．これは，IOI 市が H × W 個の区画に区切られていることを表す．

続く H 行にはそれぞれ W 文字からなる文字列が書かれており，IOI 市のそれぞれの区画の情報を表す．H 行のうちの i 行目の左から j 番目の文字 (1 ≦ i ≦ H, 1 ≦ j ≦ W) は，区画 (i, j) に屋台がない場合には '.' (ピリオド) である．屋台がある場合には '1', '2', ..., '9' のいずれかであり，その屋台で販売しているお菓子の値段を表す．

与えられる 5 つの入力データのうち，入力 1 では，屋台のある区画の数は 20 以下である．

出力

JOI 君が区画 (1, 1) から区画 (H, W) に移動する間に購入するお菓子の総額の最小値を 1 行で出力せよ．

入出力例

入力例 1

5 5
..483
.59.9
3.866
79...
4.8..

出力例 1

20

入力例 2

12 10
..498522.4
.633527629
54.4621596
634.213458
1924518685
7739539767
276155.3.6
87716372.2
.858877595
7998739511
3438.5852.
568.9319..

出力例 2

63

入出力例 1 においては，区画 (1, 1)，区画 (2, 1)，区画 (3, 1)，区画 (3, 2)，区画 (4, 2)，区画 (4, 3)，区画 (4, 4)，区画 (4, 5)，区画 (5, 5) の順番に移動して，区画 (3, 1)，区画 (3, 3)，区画 (4, 2) の屋台で販売しているお菓子を購入すると，購入するお菓子の総額が最小となる．

情報オリンピック日本委員会作 『第 15 回日本情報オリンピック JOI 2015/2016 予選競技課題』
オレンジの出荷(Oranges)

あなたはJuicy Orange Industry 社を知っているだろうか? この会社の業務は美味しいオレンジを栽培して出荷することである．ここでは略してJOI 社と呼ぶ．

JOI 社では，収穫された $N$ 個のオレンジを箱詰めして出荷することになった．オレンジは工場にあるベルトコンベアの上に並べられており，ベルトコンベアの前から順番に $1$ から $N$ までの番号が付けられている．オレンジは大小さまざまであり，オレンジ $i$ $(1 \leq i \leq N)$ の大きさは $A_i$ である．

これらのオレンジを前から順番にいくつかの箱に分けて詰める．ひとつの箱には連続した番号のオレンジしか詰めることができない．

ひとつの箱には最大で $M$ 個までのオレンジを詰めることができる．ある箱にいくつかのオレンジを詰めるためにかかるコストは，箱に詰める最大のオレンジの大きさを $a$，箱に詰める最小のオレンジの大きさを $b$，箱に詰めるオレンジの個数を $s$ としたときに，$K + s \times (a - b)$ で求めることができる．ここで，$K$ は箱にかかるコストであり，すべての箱で共通の値である．

適切な個数の箱を用意して，すべてのオレンジを適切に箱詰めすることで，箱詰めにかかるコストの総和をできるだけ小さくしたい．

課題

ベルトコンベア上に並んでいるオレンジの情報と，ひとつの箱に詰められるオレンジの個数の最大値および，箱にかかるコストが与えられたとき，箱詰めにかかるコストの総和の最小値を求めるプログラムを作成せよ．

入力

標準入力から以下の入力を読み込め．

1 行目には，3 個の整数 $N, M, K$ が空白を区切りとして書かれている．これは，オレンジが $N$ 個あり，ひとつの箱に詰められるオレンジの個数の最大値が $M$ であって，箱にかかるコストが $K$ であることを表す．

続く $N$ 行のうちの $i$ 行目 $(1 \leq i \leq N)$ には，整数 $A_i$ が書かれている．これは，オレンジ $i$ の大きさが $A_i$ であることを表す．

出力

標準出力に，箱詰めにかかるコストの総和の最小値を 1 行で出力せよ．

制限

すべての入力データは以下の条件を満たす．

$1 \leq N \leq 20 000$

$1 \leq M \leq 1 000$

$0 \leq K \leq 1 000 000 000$

$1 \leq A_i \leq 1 000 000 000$ $(1 \leq i \leq N)$

$M \leq N$

入出力例

入力例1

6 3 6
1
2
3
1
2
1

出力例1

21

$1$ 番目の箱にオレンジ $1$ からオレンジ $3$ までの $3$ 個のオレンジを詰め，$2$ 番目の箱にオレンジ $4$ からオレンジ $6$ までの $3$ 個のオレンジを詰めると，箱詰めにかかるコストの総和は $(6+3 \times (3 - 1))+(6+3 \times (2 - 1)) = 21$ となる．

どのように詰めても箱詰めにかかるコストの総和が $21$ を下回ることはないので， $21$ を出力する．

入力例2

16 4 12
3
10
13
10
19
9
12
16
11
2
19
9
13
2
13
19

出力例2

164

$11$ 個の箱を用意して，それぞれの箱に前から順に $1$ 個，$3$ 個，$1$ 個，$1$ 個，$3$ 個，$1$ 個，$1$ 個，$2$ 個，$1$ 個，$1$ 個，$1$ 個のオレンジを詰めることで，箱詰めにかかるコストの総和が最小となる．

入力例3

16 6 14
19
7
2
15
17
7
14
12
3
14
5
10
17
20
19
12

出力例3

177

入力例4

10 1 1000000000
1
1
1
1
1
1
1
1
1
1

出力例4

10000000000

答えが32 ビット符号付き整数の範囲に収まるとは限らないことに注意せよ．

第15回 日本情報オリンピック本選 課題 2016 年 2 月 14 日
スタンプラリー２ (Collecting Stamps 2)

JOI 商店街には大通りに沿って $N$ 個の店があり，JOI 商店街の入口から出口に向かってそれぞれ $1, 2, ..., N$ の番号が付けられている．JOI 商店街は一方通行で，入口から出口方向へしか移動することはできない．

まちおこしのため，JOI 商店街でスタンプラリーを行うことになった．このスタンプラリーでは，それぞれの店はJ，O，I のいずれかのスタンプを用意し，店で買い物をした人はスタンプカードにスタンプを押してもらう．スタンプラリーに参加する人はちょうど 3 つの店に入る．商店街の入口では 3 つの欄のあるスタンプカードを配り，1 回目に入った店，2 回目に入った店，3 回目に入った店のスタンプを押してもらう．商店街の出口でスタンプカードを回収し，押されたスタンプが先に入った店のものから順にJ，O，Iになっているとき，出口で商品券がもらえるキャンペーンを実施することになった．押されたスタンプの種類や順番が異なるときは商品券はもらえない．

すでに $N$ 個のすべての店はどのスタンプを用意するか決めたが，新たに1 つの店をJOI 商店街に出すことになり，新しく出店する場所と，その店が用意するスタンプを決めることになった．新しい店を出す場所は，店 $i$ と店 $i + 1$ の間 $(1 \leq i \leq N - 1)$，入口と店 $1$ の間，店 $N$ と出口の間のいずれかから決める．また，新しい店のスタンプは J，O，I の 3 通りから決める．

商品券をもらえるような店の選び方の数が大きいほど，スタンプラリーが盛り上がると商店街は考えた．そこで，新しく出す店の場所と用意するスタンプを決めたときの，上記の店の選び方の数の最大値を求めたい．

課題

JOI 商店街のすでにある店が用意したスタンプの情報が与えられたとき，新しく出す店の場所と用意するスタンプを決めたときの，商品券をもらえるような店の選び方の数の最大値を求めるプログラムを作成せよ．

入力

標準入力から以下の入力を読み込め．

1 行目には，1 つの整数 $N$ が書かれている．これは，JOI 商店街には現在 $N$ 個の店があることを意味する．

2 行目には，$N$ 文字の半角英大文字 J, O, I のみからなる文字列 $S$ が書かれている．文字列 $S$ の左から $i$ 文字目 $(1 \leq i \leq N)$ は，店 $i$ が用意したスタンプの種類を表す．

出力

商品券をもらえるような店の選び方の数の最大値を標準出力に 1 行で出力せよ．

商品券をもらえるような店の選び方の数が32 ビット符号付き整数の範囲に収まるとは限らないことに注意せよ．

制限

すべての入力データは以下の条件を満たす．

$3 \leq N \leq 100 000$

入出力例

入力例1

5
JOIOI

出力例1

6

入力例 1 では，店 1 と店 2 の間に，スタンプ J を用意する新しい店を出したとき，店が用意したスタンプを入口から順に並べると JJOIOI となる．

このとき，商品券をもらえるような店の選び方は以下の 6 通りである．

1, 3, 4 番目の店に行く．

1, 3, 6 番目の店に行く．

1, 5, 6 番目の店に行く．

2, 3, 4 番目の店に行く．

2, 3, 6 番目の店に行く．

2, 5, 6 番目の店に行く．

入力例 1 において，商品券をもらえるような店の選び方が 7 通り以上になることはない．

入力例2

7
JJJOIII

出力例2

18

入力例3

4
OIIJ

出力例3

2

入力例 3 では，入口と店 1 の間にスタンプ J を用意する新しい店を出したとき，商品券をもらえるような店の選び方の数が最大となる．

第15回 日本情報オリンピック本選 課題 2016 年 2 月 14 日