AtCoder ABC171 参加記
AtCoder ABC171 に参加したので参加記を書こうと思います。
所感
A - E までの 5 完でした。
解いた問題の中では C 問題が最難関で泣きそうでした。
あったまったのでとても嬉しいです。
A - αlphabet
問題概要
- 英大文字または小文字が 1 文字入力される
- その文字が大文字か小文字かを答える
解説
a から z は順番に並んでいることを利用して、大文字か小文字か判定を行えば良いです。
提出したソースコード
B - Mix Juice
問題概要
- N 種類の果物の値段が与えられる
- その中から k 種類を選んだ時の最小コストを求める
解説
与えられた配列をソートして、小さい方から k 個の和をとります。
提出したソースコード
C - One Quadrillion and One Dalmatians /
問題概要
- a, b, ... z, aa, ab, ..., zz, aaa, aab, ..., zzz, ... というようなルールのもとで N 番目を求める
解説
今回の A - E までで最難関でした。
名前の文字数が増える時の最初の番号を求めて、その番号との差異 (変数 diff に代入します) を求めます。
番号 N の文字数が上記の計算で一緒にわかるため、あらかじめその文字数分 a を答えの文字列に代入しておきます。
その後、diff を 26 で割った余りを取って、26 で割るを繰り返して文字列を置き換えていきます。
答えの文字列を反転して出力すれば終わりです。
26 進法変換ですね。
提出したソースコード
D - Replacing
問題概要
- 長さ N の整数列が与えられる
- Q 回、全ての B という値を C という値に置き換える
- 各操作後の数列の和を求める
解説
あらかじめ与えられた数列の和を求めておき、map などで各数の個数を記録しておきます。
各クエリ毎に を引き、を足して答えを求めます。
B の個数を 0 にすることを忘れないようにしましょう。
提出したソースコード
E - Red Scarf
問題概要
- 長さ N の整数列 A が与えられる
- 別の長さ N の整数列 B があるが、値は不明である。
- A の i 番目の整数は i 番目以外の整数列 B の xor を取ったもの
- B の各要素を求める
解説
与えられた数列の xor をあらかじめ求めておき、
各数に対して上記の数との xor を求めていけば良いです。
提出したソースコード