A - うるう年

Time Limit: 2 sec / Memory Limit: 64 MB

問題文

高橋君は忘れっぽい性格なので、うるう年は 229 日の存在を毎回忘れてしまいます。
そこで、自動でうるう年かどうかをコンピュータに教えてもらえるようにしたいと思います。
入力として与えられた年がうるう年かそうでないかを判断しなさい。

ただし、うるう年は以下の規則で決定します。
  • 規則 14 で割り切れる年はうるう年である。
  • 規則 2100 で割り切れる年をうるう年ではない。
  • 規則 3400 で割り切れる年はうるう年である。
  • 規則 4:規則 13 のいずれも満たさない場合は,うるう年ではありません。
ただし、規則 13 の内に複数満たすものがあれば後の規則(数字の大きな規則)が優先されます。 例えば、2000 年は規則 3 を満たすのでうるう年です。
2100 年は規則 2 を満たしますが、規則 3 を満たさないのでうるう年ではありません。

入力

入力は以下の形式で標準入力から与えられる。
Y
  • 年を表す整数 Y(1000 ≦ Y ≦ 2999) が 1 行で与えられる。

出力

与えられた年がうるう年ならば YES、そうでなければ NO を標準出力に 1 行で出力せよ。
なお、最後には改行を出力せよ。

入力例 1

1001

出力例 1

NO
  • 10014 で割ると 250 あまり 1 になり、規則 1 を満たさないので、うるう年ではありません。

入力例 2

2012

出力例 2

YES
  • 20124 で割ると 503 になり割り切れるので規則 1 を満たします。
  • しかし、100では割り切れないので規則 2 は満たさず、うるう年になります(うるう年ではありません、は間違いですので訂正させて頂きました)。

入力例 3

2100

出力例 3

NO
  • 21004 で割り切れるので、規則 1 を満たします。
  • また、100 で割ると 21になり割り切れるので、規則 2 を満たします。
  • しかし、400 では割り切れず規則 3 を満たさないので、うるう年ではありません。

入力例 4

2000

出力例 4

YES
  • 20004 で割り切れるので、規則 1 を満たします。
  • また、100 でも 400 でも割り切れるので規則 23 も満たします。
  • よって、2000 年はうるう年になります。

Source Name

ARC 002
B - 割り切れる日付

Time Limit: 2 sec / Memory Limit: 64 MB

問題文

高橋君は割り切れる日付が好きです。
割り切れる日付とは、年÷月÷日の計算結果が整数になる日付のことです。
例えば今日の日付は 201252 日ですが、 2012÷5÷2=201.2 となり整数ではないので、今日の日付は割り切れる日付ではありません。

高橋君は割り切れる日付が好きでたまらないので、次の割り切れる日付を心待ちにして、毎日今日が割り切れる日付かどうかをチェックしてしまいます。
彼に少しでも多くの仕事をしてもらうために、入力として与えられた日付以降で最初に来る割り切れる日付を求めなさい。
ただし、入力として与えられた日付が割り切れる日付だった場合は、与えられた日付が答えになります。

入力

入力は以下の形式で標準入力から与えられる。
Y/M/D
  • グレゴリオ暦(現在、日本で一般的に使われている暦)に従って年を表す Y、月を表す M、日を表す D/ で区切られて 1 行で与えられる。
  • Y4 桁、MD0 埋めされた 2 桁の整数である(MD は、1 桁の数の場合も 1 桁目に 0 をつけて 2 桁にする)。
  • 与えられる日付は 1000/01/01 以降、2999/12/31 以前とする。

出力

入力として与えられた日付以降で最初に割り切れる日付を、入力と同じ形式で標準出力に 1 行で出力せよ。
ただし、入力として与えられた日付が割り切れる日付だった場合は、入力と同じ日付を出力すること。
なお、最後には改行を出力せよ。

入力例 1

2012/05/02

出力例 1

2013/01/01
  • 2012/05/02 は割り切れる日付ではないので、2012/05/03 から 2012/12/31 の間の日付に割り切れる日付はないので 2013/01/01 が答えとなります。

入力例 2

2020/05/02

出力例 2

2020/05/02
  • 入力として与えられた日付は割り切れる日付なので、2020/05/02 が答えとなります。

入力例 3

2088/02/28

出力例 3

2088/02/29
  • 2088 年はうるう年なので、229 日が存在します。

Source Name

ARC 002
C - コマンド入力

Time Limit: 2 sec / Memory Limit: 64 MB

問題文

高橋君は友達と格闘ゲームで対戦をすることにしました。
格闘ゲームは A, B, X, Y4 種類のボタンを連続で入力するコマンドにより技を繰り出し戦うゲームです。
しかし、普段格闘ゲームで遊ばない高橋君にとってコマンドの入力は難しく、友達に勝てそうにありません。
そこで余っている LR のボタンに連続した 2 つのボタン入力をショートカットとして割り当てることで、コマンドの入力を短縮したいと思います。
例えば、コマンドが ABXY だと 4 回ボタンを入力する必要がありますが、LABRXY を割り当てることで LR2 回のボタン入力に短縮できます。
LR を用いて入力をなるべく短くした時に必要なボタンの入力回数を求めなさい。

入力

入力は以下の形式で標準入力から与えられる。
N
c_{1}c_{2}...c_{N}
  • 1 行目にコマンドに必要なボタンの入力回数を表す N(1 ≦ N ≦ 1000)が与えられる。
  • 2 行目にコマンドの内容を表す N 文字の文字列が与えられる。
  • i 文字目の文字である c_{i} は、A, B, X, Y のいずれかで与えられる。

出力

ショートカットを用いてコマンド入力に必要なボタンの入力回数を最小化したときの、ボタン入力回数を標準出力に 1 行で出力せよ。
なお、最後には改行を出力せよ。

入力例 1

4
ABXY

出力例 1

2
  • LABRXY を割り当てることで入力を LR に短縮することができ、ボタンの入力回数は 2 回となります。

入力例 2

13
ABABABABXBXBX

出力例 2

7
  • LABRBX を割り当てることで入力を LLLARRR に短縮することができ、ボタンの入力回数は 7 回となります。

入力例 3

8
AABBAABB

出力例 3

4
  • LAARBB を割り当てることで入力を LRLR に短縮することができ、ボタンの入力回数は 4 回となります。

Source Name

ARC 002
D - ボードゲーム

Time Limit: 2 sec / Memory Limit: 256 MB

問題文

高橋君は格闘ゲームで友達に負けたのが悔しくてたまらなかったので、今度は自分が勝てるゲームを提案しました。
提案するゲームは格子状のマスでできた盤に向かい合って座り、図の左端 1 列が○の陣地、右端 1 列が×の陣地になります。
ランダムに並べられた○と×の駒を用い、2 人はそれぞれ○か×のどちらかを自分の手駒とします。
図:盤面の例。左端の赤い列が○の陣地,右端の青い列が×の陣地となる。
駒は相手の陣地に向かって1 マスずつ前進し、相手に踏まれた駒は盤から取り除きます。
1方向にのみ進むことができ、それ以外の斜め・横・後ろには進むことができません。
また、自分の駒を踏むことはできません。

交互に 1 つずつ自分の駒を動かし、相手の駒を全て取り除くか、相手の陣地に自分の駒を 1 つでも置いたら勝利となります。
先行は○のついた駒を持っている人ですが、最初の 1 手目では×を取ることのできない初期配置になっています。
また、初期配置で既にどちらかの勝利条件を満たしていることもありません。

高橋君は必ず勝ちたいので○と×のどちらを手駒にするか悩んでいます。
高橋君が勝てるように、○と×のどちらが勝つか判定しなさい。

入力

入力は以下の形式で標準入力から与えられる。
H W
c_{11}c_{12}…c_{1W} 
c_{21}c_{22}…c_{2W}
:
:
c_{H1}c_{H2}…c_{HW}
  • 1 行目には、盤の高さを表す整数 H (1 ≦ H ≦ 2,000)、盤の幅を表す整数 W (3 ≦ W ≦ 2,000) が空白を区切りとして与えられる。
  • 2 行目から H 行は、盤の上の駒の配置として各行 W 文字の文字列が与えられる。
  • i 行目の先頭から j 番目の文字である c_{ij}は、., o, xのいずれかで与えらる。
  • c_{ij}. の場合は何も駒が置かれていないことを、o は○の駒が、x は×の駒が置かれていることを表す。

出力

○が勝つ場合はoを、×が勝つ場合はx を標準出力に 1 行で出力せよ。
なお、最後には改行を出力せよ。

入力例 1

3 10
..o.o.xxx.
...o.xo.x.
o.xxo..x..

出力例 1

o
  • まず先行の○は 3 段目左から 5 番目の駒を右に進めます。
  • ×の番になりましたが、動かせる駒のうちどの駒を左に進めても、次の○の番に駒を取られてしまいます。
  • 取られた後も先程同様、どの駒を動かしても次の○の番に進めた駒を取られてしまいます(図の水色枠にしか移動できない)。
  • つまり、最初の 1 手目で 3 段目左から 5 番目の駒を右に進めることで、○の勝利が決定します。

入力例 2

3 5
..x..
.o...
...x.

出力例 2

x
  • お互い踏み合うことはなく、○は最短で 3 手、×は 2 手で相手の陣地に到達できるので×の勝利になります。

Source Name

ARC 002