コンテスト時間: 2024-06-15(土) 21:00 ~ 2024-06-15(土) 22:40 (100分)
A - Welcome to AtCoder Land
Difficulty: ???
解答時間: 1:36
- 文字列 が与えられる。
AtCoder
、Land
であるか判定せよ。
- これは
if
を書くだけ。瞬殺。
B - Ticket Counter
Difficulty: ???
解答時間: 5:23
- 1つのチケット売り場があり、来園客はこのチケット売り場の前に一列に並んで順にチケットを購入する。チケットの購入手続きには一人当たり 秒かかり、列の先頭の人がチケットを購入し終わると、 (存在すれば) 次の人がすぐさま購入手続きを開始する。現在チケット売り場に並んでいる人はおらず、今から 人の人が順にチケットを買いに来る。具体的には、 番目の人は今から 秒後にチケット売り場を訪れ、既に列が存在すればその最後尾に並び、存在しなければすぐさま購入手続きを開始する。各 について、 番目の人がチケットを購入し終わるのは今から何秒後か求めよ。
- 問題文がちょっと複雑だが、冷静に考えれば難しくはない。
- 時間を記録する変数
time
を持っておき、各 について、- のとき (列が存在しているとき) のみ、 を に更新。
- 常に、 に を加算する (手続き処理をする) 。
- このときの
time
を出力する。
とすればよい。
C - Popcorn
Difficulty: ???
解答時間: 9:28
- から までの番号が付いたポップコーン売り場があり、売られているポップコーンの味には から までの 種類ある。ただし、すべての売り場ですべての味のポップコーンを売っているわけではない。それぞれのポップコーン売り場でどの味のポップコーンを売っているかの情報は 個の長さ の文字列 によって表され、
o
であるとき売り場 が味 のポップコーンを売っていることを、x
であるとき売っていないことを示す。どの売り場も最低1種類の味のポップコーンを売っており、どの味のポップコーンも最低1つの売り場で売られている。すべての味のポップコーンを購入するためには最低何個の売り場を訪れる必要があるか求めよ。
- 制約を見ると と非常に小さいので、各ポップコーン売り場について訪れるか訪れないかを 通りすべて試すことができる。これはお馴染みbit全探索の出番だ。
- bit全探索さえ分かっていれば特に難しいところはなく、あとは問題文の通りに実装していけばよい。
D - Souvenirs
Difficulty: ???
解答時間: 59:48 + WAx2
- お土産屋に の番号が付いた 個の箱が売られている。箱 の価格は 円であり、箱 の中には 個のお菓子が入っている。高橋君は 個の箱のうち 個を選んで買って帰り、 の名前が付いた 人に 1 つずつ箱を渡そうと考えている。ただし、以下の条件を満たすことができるように箱を買いたい。
- 各 について、人 には 個以上のお菓子が入った箱を渡す。
1人に2個以上の箱を渡したり、同じ箱を複数人に渡したりすることはできない。これらの条件を満たしつつ適切に 個の箱を買うことができるか判定し、可能な場合は支払う金額の合計の最小値を出力せよ。そうでない場合は-1
を出力せよ。
- 私の実装は以下の通り。
- まず を降順ソートする。
- 次に の情報をもとに箱のお菓子の数と価格を管理する構造体
Box
を作成し、お菓子の数で降順ソート。 - 各人の要求に応じて、条件を満たす箱を価格基準の
priority_queue
にpush
する。 - 先頭から
pop
していき、合計金額を求める。
- 30分ほど考えて解説に近いコードを書いたものの、
vector
にerase
を掛けていたため TLE 。multiset
が完全に頭から抜け落ちていて別方針で考え直したため、1時間も溶かしてしまった。