3

ABC224 茶色コーダーが解けた所まで

4 min read

AtCoder Beginner Contest 224

https://atcoder.jp/contests/abc224

ABC224の問題を、本番で自分が解けた所までの解説です。

ちょっとサボってたので(言い訳)
1日1ABC分、4日間で取り戻したいと思います…。

今回は3完でした。ううむ、グラフ問題が弱い…。

A - Tires Difficulty: 6
https://atcoder.jp/contests/abc224/tasks/abc224_a

if文で条件分岐してあげる

  • 制約より、入力される文字列は末尾が「er」か「ist」のどちらか
    • 2文字と3文字の比較…ううん…面倒な感じ…?
      • 2文字見て、erならer。erじゃないならist。
      • 3文字見て、istならist。istじゃないならer。
        • どっちでもいけますね。

(確か)Twitterで見かけた、スマートだと思った解法

  • 末尾の1文字だけ比較する
    • 末尾がr : 後ろ2文字がer
    • 末尾がt : 後ろ3文字がist



B - Mongeness

Difficulty: 81
https://atcoder.jp/contests/abc224/tasks/abc224_b

問題を咀嚼する

  • 添字が多かったり数式だったりすると、脳が文章を理解する事に対してブレーキをかけてしまいます…。
  • 一旦自分でも分かる簡単な日本語に直してみる。
    • 縦H横Wの数字表から、1マスを選んだとき、(Ai1,j1 A_{i_1,j_1}、Aと呼ぶ)
      • 選んだマスより下の行&右の列に存在するマスから、2マス目を選ぶ(Ai2,j2A_{i_2,j_2}、Cと呼ぶ)
      • マスAを左上、マスCを右下とする長方形を描く。左下のマスをB、右上のマスをDと呼ぶ。
      • マスAの値 + マスCの値 \leq マスBの値 + マスDの値
        • マスA、マスCの全組み合わせについて、この条件を満たす?

制約を見て考える

  • H,Wは最大でも50行50列…2500マス。
    • すべてのマス目同士の組み合わせを考えると、2500*2500=6250000
      • 6×1066 \times 10^6…全部しらみつぶしに数えたとしてもいけそう感ある

条件を満たす? or 満たさない?

  • すべてのマス目の組み合わせが条件を満たす場合:Yes
  • そうではない場合:No
    • 1つでも反例があればNo:反例が見つかればNo,見つからなければYes



C - Triangle?

Difficulty: 301 https://atcoder.jp/contests/abc224/tasks/abc224_c

図形問題

  • N点の中から3点を選んで線分でつないだときに、図形が正の面積を持つ三角形になるような点の選び方の総数を求める

3点を結んだ図形が正の面積を持つ三角形になる…?

  • 三角形が成立するための条件は色々あると思われます。
    • 一番長い辺
    • 2直線の傾き
      • 今回は2直線の傾きを使用します。
      • 選ばれた3点(A,B,C)のうち1点(A)を固定して…
        • ABの傾きとACの傾きが等しい=A,B,Cが一直線上に並ぶ=三角形が出来ない

計算速度について

  • 本番でもやらかしたのですが、Python3で提出するとTLEでした…もっと上手いこと短縮できたらAC通るのかもしれませんが、技術不足故…。
    • Pypyで出したらあっさりAC、ソース自体は間違えてない…筈…?



Discussion

コメントにはログインが必要です。