Yuulis.log

トンネルを抜けるとそこは参照エラーであった。

【AtCoder】CodeQUEEN 2024 予選 (AtCoder Beginner Contest 358) - 参加記 | 茶コーダーが解くAtCoder

atcoder.jp

コンテスト時間: 2024-06-15(土) 21:00 ~ 2024-06-15(土) 22:40 (100分)

A - Welcome to AtCoder Land

Difficulty: ???
解答時間: 1:36

  • 文字列  S, T が与えられる。  S =AtCoder T =Landであるか判定せよ。


  • これはifを書くだけ。瞬殺。

B - Ticket Counter

Difficulty: ???
解答時間: 5:23

  • 1つのチケット売り場があり、来園客はこのチケット売り場の前に一列に並んで順にチケットを購入する。チケットの購入手続きには一人当たり  A 秒かかり、列の先頭の人がチケットを購入し終わると、 (存在すれば) 次の人がすぐさま購入手続きを開始する。現在チケット売り場に並んでいる人はおらず、今から  N 人の人が順にチケットを買いに来る。具体的には、  i 番目の人は今から  T_i 秒後にチケット売り場を訪れ、既に列が存在すればその最後尾に並び、存在しなければすぐさま購入手続きを開始する。各  i について、  i 番目の人がチケットを購入し終わるのは今から何秒後か求めよ。


  • 問題文がちょっと複雑だが、冷静に考えれば難しくはない。
  • 時間を記録する変数timeを持っておき、各  i について、
    •  \mathrm{time} < T_i のとき (列が存在しているとき) のみ、  \mathrm{time} T_i に更新。
    • 常に、 \mathrm{time} A_i を加算する (手続き処理をする) 。
    • このときのtimeを出力する。

とすればよい。

C - Popcorn

Difficulty: ???
解答時間: 9:28

  •  1 から  N までの番号が付いたポップコーン売り場があり、売られているポップコーンの味には  1 から  M までの  M 種類ある。ただし、すべての売り場ですべての味のポップコーンを売っているわけではない。それぞれのポップコーン売り場でどの味のポップコーンを売っているかの情報は  N 個の長さ  M の文字列  S_i \: (i = 1, 2, \cdots, N) によって表され、  S_{ij} =o であるとき売り場  i が味  j のポップコーンを売っていることを、xであるとき売っていないことを示す。どの売り場も最低1種類の味のポップコーンを売っており、どの味のポップコーンも最低1つの売り場で売られている。すべての味のポップコーンを購入するためには最低何個の売り場を訪れる必要があるか求めよ。


  • 制約を見ると  1 \leq N, M \leq 10 と非常に小さいので、各ポップコーン売り場について訪れるか訪れないかを  2^N 通りすべて試すことができる。これはお馴染みbit全探索の出番だ。
  • bit全探索さえ分かっていれば特に難しいところはなく、あとは問題文の通りに実装していけばよい。

D - Souvenirs

Difficulty: ???
解答時間: 59:48 + WAx2

  • お土産屋に  1, 2, \cdots, N の番号が付いた  N 個の箱が売られている。箱  i の価格は  A_i 円であり、箱  i の中には  A_i 個のお菓子が入っている。高橋君は  N 個の箱のうち  M 個を選んで買って帰り、  1, 2, \cdots, M の名前が付いた  M 人に 1 つずつ箱を渡そうと考えている。ただし、以下の条件を満たすことができるように箱を買いたい。
    •  i = 1, 2, \cdots, M について、人  i には  B_i 個以上のお菓子が入った箱を渡す。

1人に2個以上の箱を渡したり、同じ箱を複数人に渡したりすることはできない。これらの条件を満たしつつ適切に  M 個の箱を買うことができるか判定し、可能な場合は支払う金額の合計の最小値を出力せよ。そうでない場合は-1を出力せよ。

  • 私の実装は以下の通り。
  1. まず  B を降順ソートする。
  2. 次に  A の情報をもとに箱のお菓子の数と価格を管理する構造体Boxを作成し、お菓子の数で降順ソート。
  3. 各人の要求に応じて、条件を満たす箱を価格基準のpriority_queuepushする。
  4. 先頭からpopしていき、合計金額を求める。


  • 30分ほど考えて解説に近いコードを書いたものの、vectoreraseを掛けていたため TLE 。multisetが完全に頭から抜け落ちていて別方針で考え直したため、1時間も溶かしてしまった。

結果

Performance: 628
Rating: 635 → 634 (-1)

atcoder.jp

初めての4完!と舞い上がったのも束の間、レートはマイナスであった...