2022/4/5(火)

なんかよく眠れないし集中もできない。昨日の夜は22時台に就寝の準備が整ったので寝ようとしたが、眠気はあるのにどうも寝苦しくて寝れず、結局寝れるまで動画などを見ていた。

寝苦しいというと暑くて、とか寒くて、とかを一般に思い浮かべると思うのだが、なんというか、頭が苦しい。寝てよいという感じがしない。頭が働かないのに働こうとしている感じがする。

目に見える進捗が出なかったから精神的にやや悪い状態になってしまっているのだろうか。


背景絵を描こうと思ったのだがむずすぎた。

描きたかったのは見上げた天井だったのだが、消失点の取り方や視点の置き方が定まらない。

壁が端に少し見えているのだが、壁にあるものをどういう感じで描いていけばいいか分からない。横方向にすごくつぶれることになり、縦の位置(物の高さ)を描き分けにくい。

待てよ?ここに文章を書いていて気付いたが、壁にあるものって本当に垂直のものは垂直にするべきなのか?むしろこれ、上下に消失点を置いた2点透視図法にした方が良いんじゃないのか!?明日試そう!

パースの考え方に慣れてないとこんな簡単なことにも気付かなんだ。よく考えたら地面に垂直のものがまっすぐ縦に見えるのは視線が地面に対して水平の時のみで、少しでも見上げているなら垂直のものは斜めになるはずだ。


今日解いた競プロの問題。

ARC133-C 自力AC。まず上界は自明に$HW(K-1)$であることが分かる。そして各行、各列について、mod Kでなるべき和の値というのがあるので、最低でもここまで減らさないといけないよというのが分かる。

例えばK=5でH=4とした場合、その列の和の上界はH(K-1)=16となる。しかし列の和がmod Kで3でなければならないとした場合、16以下であってmod 5が3となる最大の値は13であり、16-13=3は少なくとも減らさなければならないと分かる。mod Kが3でなければならないので、場合によってはさらにKの倍数だけ小さくする必要があるかもしれない。

各行各列について「減らさなければいけない値」を算出する。各行に関するものを$C_i$、各列に関するものを$D_i$とする。$C_i$の和と$D_i$の和を比較し、差がKで割り切れない場合はそもそも構成不可となる。なぜなら条件を満たすにはKずつしか各行・各列の値を上下できないので、一向につじつまを合わせることはできない。

差がKで割り切れる場合は、$C_i$の和と$D_i$の和の内大きい方をHW(K-1)から引けばよい。結局のところ差がKの倍数ならば、小さい方に値を足して$\Sum C_i=\Sum D_i$とすることができる。そうすれば各列ごともしくは行ごとに減らす値を配分していくことによって条件を満たすものを構成することができる。

ARC124-C 解説AC。X,Yとして取り得る値は全探索できるというのは全く思いつかなかった。「ある値の約数の数というのは結構小さい」というのは全く思考のセットになかったな。これは学びがあったと言えるかもしれない。

約数列挙の計算量は$O(\sqrt{N})$だが、約数の数自体は$O(N^{\frac{1}{\log \log N}}$だとかで、$O(\log N)$よりちょっと大きい程度らしい。

参考: https://scrapbox.io/magurofly/約数の個数のオーダー


ちょっと久々にC++である程度の規模の開発をしようとしている。具体的にはGUIのアプリ。

まずGLFWと戦い、ウィンドウとかモニタとかのラッパクラスを作った。これでC言語野郎をある程度手なずけることができた。

それからopenglと戦い、2D描画のためのラッパを書いた。これで変換行列だとかを深く考えなくてもよくなった。

ある程度の規模なので設計を多少真面目に考えたいのだが、正直どうすればいいのか全く分からない。というかよく考えたら中~大規模の開発の経験自体ほとんどない。自分は言語仕様だとかライブラリ・APIの仕様の勉強はそれなりしてきたが、設計の勉強はまったくしてこなかったな。ちゃんとやりたいがどこから手を付ければいいのか全く分からない。


胎界主を読んだ。一郎、思ったより上のやつらとつるんでたな…

虹増一郎の望む状況ってなんなんだろ。自分より上のやつらがみんなアフリカに行って全滅し自分は東郷を牛耳る、とかなんだろうか。生物兵器の下りは分からんな。サタナキアがどういう流れを見据えているのかがここに至ってまったく分からん。

「虎の尾を踏む」のは何らかの破滅フラグの暗喩なんだろうか。


今日はジョギングをした。筋トレはやる気が出なかった。

鬼トレ再開するかなあ。

Categories: