競プロまだやってる
飽きっぽい俺がまだ熱を持ってやれていることに自分が一番驚いている。
もうすぐrecomendationの灰色が全部埋まって、茶色に突入するレベル。
知識さえ身に着けられれば緑まではいけると思うんだが、グラフ、DP、、マジで手強い。
そして本業の方が時間泥棒すぎて全然勉強できねえ。あ、勉強って 競プロのほうね。
ん?総合内科専門医試験?
なんでしたっけそれ。
ラムダ式の「キャプチャの&」と「パラメータの&」は全然違う
(2024/1/9 スーパー意味不明な記載になっていたので書き直し)
ラムダ式が全然わからなくて、dfs書いてて一生エラー吐きまくってたんだけど、やっと解決したから記録しておく。
[&]と(int &x)はしっかり区別しなきゃだめ。
まずは例示から。
#include <bits/stdc++.h> using namespace std; int main() { int a=1; int b=2; int c=3; auto f=[](int x, int y, int z){ x*=3; y*=3; z*=3; }; f(a,b,c); cout<<a<<b<<c<<endl; }
この場合出力されるのは123なのか369なのかってことだけど、
123
です。
キャプチャの&:[&]は、外にある変数を参照で使えるという意味。
パラメータの&:(int &x)は引数として入力された変数を参照で使うという意味。
上のコードはパラメータに&がついてないからfはa,b,cをコピーで渡しているので、値は更新されない。
参照で渡すときはパラメータに&をつけて
#include <bits/stdc++.h> using namespace std; int main() { int a=1; int b=2; int c=3; auto f=[](int &x, int &y, int &z){ x*=3; y*=3; z*=3; }; f(a,b,c); cout<<a<<b<<c<<endl; }
にする。
これで答えは
369
になる。
キャプチャの&をつかうならば、
#include <bits/stdc++.h> using namespace std; int main() { int a=1; int b=2; int c=3; auto f=[&](){ a*=3; b*=3; c*=3; }; f(); cout<<a<<b<<c<<endl; }
これで答えは
369
になる。
きっちり区別しながらコードを書くようにする。
やっと茶色になった
Atcoderやっと茶色になったわ。
今日のABC、DE手も足もでんかった。
緑ぐらいまでは行ける気はするけど、そこからは厳しそうかな。。
ワンチャン水色ぐらいになれんかな。。。
まいるすとーん
atcoder problems 500AC ほぼ灰色問題
連想配列を使って計算量を減らす対応ができる
わかるアルゴリズムはDFSとBFSのすごいかんたんなやつだけ。dpも1次元ならなんとか。
ソラでかけるアルゴリズムはユークリッドの互除法と素数判定ぐらい。DFSとBFSは本見ながらじゃなきゃ無理。
ラムダ式は自力じゃかけない。
lower_boundを扱えることが二分探索できるということなのかはわからんが、前者はできる。
atcoderまだやってます
ABC306、ウンウン考えて残り30秒でやっとD通したのにunratedだったわ。
3,4回unrated食らって流石に萎えてるわ~。
でも初めて本番でD問題通せたので嬉しかった。
とりあえずDFSとかDPぐらいは勉強するかあ。。
AtCoder茶色の壁は結構高いぞ
AtCoderのランク別色ってのは赤色から始まって、赤、橙、黄、青、水、緑、茶、灰と8段階に分かれてて、茶色ってのは下から2番めなんだけど、なんもしらんと茶色なんてゲームでいうブロンズみたいな初心者ランク帯の様に感じる。
では茶色が時間かけて考えれば解るとされる茶diff問題がこちら。
atcoder.jp
ようは9×9のマス目があって、その複数のマス目に#で表されるコマがおいてある。
そのコマたちから4つを選んで、正方形となりえるのは何個か?という問題だ。
以下ネタバレ全開なので、問題解きたい人はここでバック。
方針としては♯の点から2点を取り、その2点から作れる正方形の残り2点を求める。
新たに求めた残り2点が、①そこにコマがあるか、②マス目に入っているか、で判定する。
このときに正方形の一意性を保つ(同じ正方形を何回もカウントしない)ために、#の2点,としたときにがの"右上"(真上はOK)というふうに4重for文の設定で、開始と限定して、を回転行列で回転させて、そのベクトルとを足してを反時計向きに取る、という作業が必要。
んでそれから得られた,が上に書いた①、②の条件をみたすかどうかを判定するってわけ。
これ結構難しいと思うんだけど。。。
茶色はアルゴリズム的な知識はあまり要求されないけど、この純粋な数学的能力、今回はベクトルと座標平面の回転、あたりが要求されるのはある程度高校で数学得意な方じゃないと難しくないか?
茶色にはたどり着きたいけどなー。まあ程々に頑張ろう。
AtCoderを始めて一ヶ月経ったけど
全然飽きてなくてめっちゃハマってるわ。
一週間ぐらいで飽きるかなーって思ってたけど、ドハマリ。
30代になって、steamとかでゲームさがしてやってもすぐ飽きちゃっての繰り返しで、もう歳なんだな~って思ってたけど、単純にハマってなかっただけなんだって分かって嬉しいわ。
ひとまず1ヶ月経過後のatcoder problems.
受験数学は得意だったから、茶色ぐらいすぐいけるやろーって思ったけど甘かった。色々問題はあるけど、やっぱC++がよーわからんってのが大きいな。vectorのメンバ関数もあやふやだし、vectorの入れ子や、pair型をvectorに入れるのも調べてなんとか分かる感じ。
イテレータを理解するのにも時間掛かったし、ぶっちゃけいまもよくわからんが、多分*つけると要素見れるからポインターみたいなもんと思いながらやってる。これ理解できなくてmin_elementとかがうまく実装できなかった。
あとはアルゴリズムの知識。この前のABCはABまですいーっと解けたのに、Cに無向グラフとかいうわけわからんのが出てきて死亡。グラフアルゴリズムなんて一体どこで学ぶんですか。
んで一番大きかったのは、純粋な数学力が悪くなってる。これはちょっとショックだった。プログラミングの知識じゃなくて、解法が思いついてない。
まあ飽きが来るまでもうちょいちょこちょこやっていきますわー。
あ、そういえばFPの合格証届いてた。FPってなんだっけ。