chokudaiさんが面白そうな事言っていた。
「今日の問題」とか言いながら適当な問題を毎日挙げるだけで、TLの人が毎日問題を解いてくれるんじゃないか、というのはちょっと思い始めているので、毎日なんか学びがありそうな300~500点くらいの問題を挙げていく習慣をつけてみようかなーと思っている。
— chokudai(高橋 直大)🍆🍡🌸 (@chokudai) August 19, 2019
折角なので乗っかりたい。
モチベーション維持のために、勝負形式にしたいと思う
勝利条件
- 300~500点代くらいの問題全部AC(そもそもchokudaiさんが出せる問題がなくなるパターン)
- chokudaiさんが今日の一問の投稿をしなくなるまで解き続ける(このことを当ブログでは"完走"ということにします)
敗北条件
- 一週間くらい放置
だいたいこんな感じで。勝った負けたとかでなんもないです。
解く
とりあえず8/20投稿の分
今日の一問!ABC026より、高橋君の給料。今だと300点くらい?
これも昨日と同じく「実装出来てほしい」系の問題。緑の人の目標タイムが20分くらい、って感じ。https://t.co/Z2MuWxj8lp— chokudai(高橋 直大)🍆🍡🌸 (@chokudai) August 20, 2019
この問題は木構造パッと作れば簡単に解けます。親のindexとかを違う場所に保管する必要がないのがキモです。
必ず自分より社員番号が小さい上司がただ一人存在する
社員番号をインデックスとしてconnection[i]みたいな感じで接続されているノード番号を取り出すようなリストを作ればほぼ勝ちです。
N=20なので肩の力を抜いて実装しましょう。接続されているノード番号を取り出した後、1個ずつforで上司か否か判別して、部下のみのリストを作ればあとはmax()とかmin()とかで簡単にその社員番号の給料が出せますね。
あとこういう問題は 求められることが確定している 所から解くべきです。
今回の問題では、一番大きい社員番号は給料が確定で1なので社員番号を大きい方から求めていけば簡単に社員番号1の給料を決定できます。
というわけでこんな感じのコードになりましたとさ
以上