LoginSignup
2
1

0.はじめに

 緑コーダに戻って初めてのコンテスト。
 久々にD問題まですらっと解けましたが
 E以降は無理でした。
 D問題までは配点的にも易しい問題だったので
 レートは+5と微増で783となりました。

1.A - Welcome to AtCoder Land

 特にひねることもなくインプットを指定文字と比較して
 結果を出力して終了

 https://atcoder.jp/contests/abc358/submissions/54556739

2.B - Ticket Counter

 B問題らしい難易度の問題(あくまで個人の感想です)
 前の客が購入が終わった時間を変数pre(最初は0)に保持。
 i番目の客が購入が終わる時間は
 preとT[i]の大きい方+A
 それを表示してpreに格納して次の人をチェック
 と、繰り返して終了

 https://atcoder.jp/contests/abc358/submissions/54564292

3.C - Popcorn

 制限がゆるいので、素直に全部試してもいけるかもと思い
 まずは実装
 【実装】
  ・配列LにSを格納
  ・itertools.permutationsを全順序の組み合わせに対して
   全種類のポップコーンが何店舗目で変えるかをチェック
  ・一番少ない店数で買える組み合わせを表示
  
 →例題は問題なくクリア
  →10種類のポップコーンが10個の店でそれぞれ一個ずつ売られている
   一番時間のかかりそうなパターンを試す
    →4秒とテスト自体は終了するけど、問題の制限はオーバー
 と、微妙な感じだったので順序の組み合わせに対するチェック部分を
 bit演算に変更することによって300ms以下に実行時間を減らすことができました。

 https://atcoder.jp/contests/abc358/submissions/54586627

4.D - Souvenirs

 C問題よりも簡単な気がしました。
 ”1 人に 2 個以上の箱を渡すことや同じ箱を複数人に渡すことはできないことに注意してください。”
 という注意書きから、考えがだいぶ簡単になるなと思いました。
 【考え方】
  ・AとBを昇順に並べる。
  ・A用のINDEX”j”と回答用変数ansを0で初期化
  ・Bを先頭から見ていき(INDEX i)
   jをB[i]>A[j](人B[i]が満足するお土産)まで
   jに1を加算していく
   この際、jがNを超えたら-1を出力して終了
  ・超える前にB[i]<=A[j]を満たすjが見つかったら
   ansにA[j]を加算し、jに1加算(同じお土産を違う人に渡せない為)
   →この際、jがNを超えかつ、iがM未満(まだお土産渡していない人がいる)の時
    -1を出力して終了
  ・Bを無事見終わったらansを出力して終了
 
 マッチング的な考え方で解決できました。

 https://atcoder.jp/contests/abc358/submissions/54591192

以上

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1