なが月・16日目

16日目

午前

ABC131A-DをC++で解いた。C問題ではC++17ではないのでstd::gcd, std::lcmが使えないとあって、さっそく関数テンプレートでmyGCD, myLCMを書いた(gcc拡張で__gcdがあるようだが、それを使うのはコンテスト中ならともかく過去問ではしたくなかった)。楽しかった。

D問題はABC137Dとよく似ている。締め日がある場合には締め日に近い=制約が厳しい方から決めていくのがよい。

ABC137Dでは所要時間はすべて1なので、締め日から遡って、支給が間に合う仕事の中で報酬が高いものを選べばよかった。今回は仕事の所要時間が一定ではなく、全ての仕事を各々の締め切りまでに間に合わせられるかが問われている。これは誰もが現実世界で行っていることで、素朴に考えても締め切りが近い方からやらなければならないのは自明だろう(先に難しいタスクをやると疲れて他のことができなくなる、ということが起き得ないところだけ異なるが)。最初は

set<int> deadlines;
map<int, vector<int>> jobDict; // key is deadline, value is timeframes

を使った。だが辞書の値にpush_backするのが遅いのか、setにinsertするのが遅いのか、のちに行ったvector<pair<int, int>> jobs;一個をソートして使う方がかなり速かった。解説を見てpairを使ったやり方を写経したとき、sortがPython同様タプルの先頭要素でソートしてくれることを知った。カスタムソートしたいときはPythonほど綺麗ではないがラムダ式で書ける(ここでは書かない)。

午後

VR制作を行っていた。以前公開したものを拡張するため、車とNavMeshに手を加えた。Animationをキーフレームごとに編集して微調整し、望みの動きに近づけることもできたので満足している。今月末にはアップデートをリリースしたい。

Unity Learnは表現の幅を広げるには有効そうだが、表現する技術を持たないのでは広げようがないのでひとまずAfter Effectsチュートリアルを進めることにした。

AEファイルは各素材を参照するだけなので、ファイルサイズが非常に小さい。だがチュートリアルには素材もついてくるので毎回ダウンロードサイズが大きくやや時間がかかる。

今回はhttps://helpx.adobe.com/after-effects/how-to/create-composition-animation.htmlで動画をもとに望む時間のコンポジションを作成しレイヤーを追加して文字やアイコンを表示させることを理解した。