うさよめも

@usayomoが何か書く

20210505

NBA

接戦が多くて終盤のハシゴ観戦が忙しかった。
ヒートはTHJの爆撃で持っていかれたっていうのはあるけど、ジミーいないと一気に攻め手が無くなるのがもうちょっと何とかなったらいいな。
本当はそういう時にオラディポとかヒーロを出したいんだろうけど...

競プロ

Codefocesやるつもりだったのもあってか、なんとなくAtCoderに向き合う気持ちになれなかった。 こどふぉはCまで3問出せたので結果待ち。
Dも解けないとなーって感じの問題だったので、明日起きたら復習します。

20210504

NBA

今日はIND-WASを流し見したのみ。ウエストブルックヤバすぎんか。
八村もいいとこ走ってパスもらって気持ちよさそうにプレーしてたし、大きな怪我をしているメンバー以外は揃ってかなり調子良さそうに見える。
ギャフォード取ったのが大当たりだったという印象。このまま波に乗ってPOあると思う。

競プロ

今日もグラフやるか、と思ってこの間出た後やり残していたABC198E。
本当に意味がわからないんだけど、解説見た後DFSで解くつもりで一生BFS書いてた。 うまく計算量落とせればBFSでも行けるのかもしれないけど、試行錯誤した結果すぐ自分にできる感じがしなくてDFSで書き直した。 再帰書くの苦手だなあって感じなので数解いて慣れていきたい。

atcoder.jp

ユーザ解説の抜粋になるけど、学びは以下。テク身につけていこう。

頂点を潜るときにcntの自分の色をインクリメントして、離れるときにデクリメントすることで、この配列に入っている情報を 現在見ている頂点から始点(頂点1)までの情報に限定することができる。 このようなテクは木構造+dfsでよくみられるので慣れると応用範囲が広い。

blog.hamayanhamayan.com

↑がコケまくって疲れたので、A〜C問題をいくつか解いて今日は終了。

CodeForces

こどふぉにもチャレンジしてみようかと思って、Round #719(Div.3)に出ようと思っていたら延期になったらしい。
明日予定合えばやってみる。

codeforces.com

20210503

1:30就寝8:00起床で生活リズムのリセットに成功。
洗濯も掃除もキッチリやったんで上出来の一日。
クローゼット内の不用品処分したらゴミ袋1.5袋分くらいあったんで全部捨てる。

NBA

MIAはプレーイントーナメント回避を考えると最重要説が濃厚だったCHA戦に危なげなく勝利。
ラメロ復帰できて良かったなって感じではあるけど、とてもルーキーとは思えないゲーム運びで末恐ろしい限り。
BOSが負けたのでとりあえずイースト6位。ブラウンとテイタムは心配だね...
実はMIA-BOSの直接対決が2試合残ってて、上位ともまだ当たるので最後まで震えながら見守る覚悟。

開発環境改善

asdf

pyenvだのrbenvだのnodebrewだの、言語別の管理パッケージが乱立するのを避けるべくanyenvを導入しようとしたところ、 どうやらasdfの方がメンテもされているしスタンダードになっているような感じだったので導入。

で、python 3.8.2をインストールしようとして以下と同様のエラーでコケる。

qiita.com

上記Qiita記事にも記載がある通り、pyenvのプロジェクトでもIssueには上がっていていくつかの対応方法も記載あり。

github.com

素直にCommandLineToolsじゃないフルのXcodeをインストールすれば通りそうだけど、デカいし用もないので入れたくないってことで、
パッチURL指定で通す方法を採用したい。 がasdfではどうすれば良いのか分からなかったのでググったところ、asdf-python公式に書いてあって解決。

github.com

結論としては以下。

export ASDF_PYTHON_PATCH_URL="https://github.com/python/cpython/commit/8ea6353.patch?full_index=1"
asdf install python 3.8.2

tldr

github.com

今日知った。コマンドの用例サマリを出力してくれる。
manとか--helpをガッツリ読むほどではない、「引数(オプション)なんだっけ」みたいな時に便利そう。

競プロ

一昨日掲げた目標へのアプローチということで、グラフ問題に向き合う。
入力の受け取り方が曖昧なままだったので再確認して、PAST本に沿って以下2問。
言葉だけ聞いたことあったトポロジカルソートの定義をようやく知りました。

atcoder.jp

atcoder.jp

20210502

前日眠れなくて徹夜スタート。 昨日掲げた目標ノータッチになっちゃったけど、早めに寝てリセットします。

NBA

ヒート久々の快勝。ナンが最近ずっと安定していいプレーをしてくれているのが助かる。
今日はストラスもいいパフォーマンスで出場時間伸ばしててgood。
他は眠い目擦りながら見てたけど接戦多すぎんか。マジックとマーベリックスは最後まで本当に分からなかった。

競プロ

今日は2問だけ。 ABC23B(かんたん)と、ABC144Dを解いた。

atcoder.jp

ひたすら作図してゴリゴリ辺の長さ求めて逆三角関数に放り込んだ。 三角関数思い出すのにも少しタイムラグがあって、使わないとこうなるんだなーって感じ。

20210501

開発環境改善

やり始めるとキリがないやつ。 よく叩くコマンドをabbrで整理。昨日やったのはこの辺。

abbr -a aba 'abbr -a'
abbr -a abd 'abbr -d'
abbr -a abp 'abbr | peco'
abbr -a abs 'abbr -s'
abbr -a bi 'brew install'
abbr -a bud 'brew update'
abbr -a bug 'brew upgrade'
abbr -a ps procs
abbr -a psp 'procs | peco'
abbr -a pya 'python a.py' # AtCoderやる時用
abbr -a pyb 'python b.py'
abbr -a pyc 'python c.py'
abbr -a pyd 'python d.py'
abbr -a pye 'python e.py'
abbr -a pyf 'python f.py'

NBA

見たい試合多かったけど、どの試合も割と点差が開いてて横目に見る感じだった。
SAS-BOSだけはアツ過ぎてガッツリ見たけど、あれでお腹いっぱいになってしまった。
テイタム60点はBOSの1位タイ記録らしいと聞いて、前回はラリー・バード辺りがやってそうだなーと思ったら案の定だった。

競プロ

atcoder.jp

Dは最初、連続する同じ文字の削除をdequeへの追加時にやってしまう方針で実装したつもりがテストで何かうまくいかず、
結局最後にまとめて処理する方針で実装してWAをもらって失敗。
ABDの3完目標で挑んで、Dも早めに方針が立って結構ノリノリで実装していたので悔しい。
もったいなかったなー。

明日の目標

昔練習したはずのグラフ系の問題が今全然実装できる気がしないので、向き合いたい。
docker学習も手を付けていきたい。

20210430

4月最終日はサボった感強い。
NBA観戦休んで昼前に起きてずっとAtCoderで適当な問題解いて買い出し行って、
眠くなって寝て起きて23時くらいからまたAtCoderしています。
もやしナムルの素は買った。
明日いろいろ見なきゃいけないし、サボったのはまあいいとしていつ寝るかなー。

20210429

NBA

LAL-WAS, SAS-MIA, LAC-PHX をハシゴ。
MIAは勝ったからオールOKみたいなところはあるけど、もうちょっと安心感ある勝ち方してほしい。
八村のAD超えダンクは日本人みんな見といてくれ。
PHXは11年ぶりのPO進出決定ということで良かったね。最後にPO出たの俺が高校生の時かよ。

明日は起きられたらTOR-DEN見ようかな。

研鑽

Railsチュートリアル

次の仕事で使うということで4月半ばくらいから少しずつやっていたRailsチュートリアルをとりあえず完走。
フレームワークとしての全体構成のわかりやすさ、Webアプリケーション構築で欲しい機能のまとまり方はさすがといった感じで、 個人開発とかリソースが限られてるスタートアップでもガンガン作れる理由は肌でわかった。
個人的にはDBマイグレーション周りの機能に感動してた。DB構成管理って個別にやるとキツいんだよな。

競技プログラミング

昨日に続いてEducational DP ContestのCとD。 多分Eは重さと価値を入れ替えればいいんだと思うので明日やる。 あとDPっぽい茶Diff問題を探して、ABC129 C問題。 in使うんだったらlistじゃなくてsetのほうが速い。初歩押さえていきましょう。

qiita.com

atcoder.jp

N, M = map(int, input().split())
# A = [int(input()) for _ in range(M)] # 最初こっちで書いててTLE
A = {int(input()) for _ in range(M)}

cnt = [0] * (N+1)
cnt[0] = 1
if 1 not in A:
    cnt[1] = 1

for i in range(2, N+1):
    if i not in A:
        cnt[i] = cnt[i-2] + cnt[i-1]

        if cnt[i] > 1000000007:
            cnt[i] %= 1000000007

print(cnt[N])