AtCoderで入緑したので入緑記事を書いてみる。(7割ネタ)
入緑しました
とても嬉しいです。
わたしはだれ
高校1ねんせい。男。イケメン。
DirectXとかUnityとかでゲームを作っていたりする。
できること
できないこと
精進方法
主にE8さんのこの記事を読んでやってみたりやってみなかったりしました。おわり
あとはコンテストに出るとか?大層なことはしていません。本当に。
茶色になっていない人はこの記事を読んでみると良いかも。
(っていうか問題セットが連続で良くて緑になっただけかもしれない。)
精進記録(AtCoder Problems)
tettyA
Achievement
Accepted
306
11235th
Shortest Code
0
596th
Fastest Code
0
1592nd
First AC
0
1002nd
Rated Point Sum
58300
13736th
Longest Streak ?
6 days
19427th
Current Streak ?
0 days
Last AC: 2023-01-07
Streak Sum
128 days
TEE ?
13489
Daily Effort
----------ネタ・ゾーンここから----------
脳内彼女との理想のデートプラン
脳内彼女との理想のデートプラン
— がぶりえる@大阪 (@gabriel55_) 2023年1月10日
梅田に行きおしゃれなお店に行く。そこで楽しく団欒をする。
通天閣やらアベノハルカスやらで社畜の残業で構成されている夜景を見てロマンチックな雰囲気にする。
帰り道に手を繋ぎ、信号待ちでキスをする。最後は十三駅近くの検閲により削除で検閲により削除♥する。
えっち絵紹介
えっち絵紹介
— みちらから🐙🔥(羊) (@Michirakara) 2023年1月10日
私は検閲により削除とか検閲により削除とか検閲により削除とかが好みなので、検閲により削除系の絵が多いです。ここでは私の検閲により削除の検閲により削除検閲により削除検閲により削除のうち、ほんの検閲により削除検閲により削除程度の絵を検閲により削除でブログに検閲により削除ようと思います。
----------ネタ・ゾーンここまで----------
総括
よくぞここまでブラウザバックせずに読んでくれました。私は嬉しい。
この記事のネタを募ったところマトモな回答が無かった。私は悲しい。
なんと入緑するまでにコンテスト参加回数が50回を超えているんですよね。
なぜなら私が怠惰で全く精進していないからです。(Acceptedも多分殆どコンテスト中に解いた問題。)
こんな人間でも入緑は出来るのでまだ入緑していない人はがんばえー!!!
~(完)~
ABC281 D - Max Multiple 備忘録
前置き
間違ってても大目に見てくれや。
URL
概要
問題文見ろ。
解法
DはDPのD。 BIT全探索、next_combination()などに頼ると計算量に処される(自明)。
添字 is 何?
欲しいものはなんだろな?
A:「n番目までの要素から」「k個選んだとき」
=>dp[n][k]でヨシww!
Atcoder「WA」
WTF?
余り、分かんないよね...
つまり
dp[n][k][d]:=n番目までの要素からk個選んだときの最大の和(ただし、d=和%mod D)
初期化
とりま全部-1。SにDの倍数が含まれへんっちゅうことやな。
dp[0][0][0]=0
遷移
A[n]を選ぶ場合と選ばない場合を考えないといけん。
- 選ぶ場合
dp[n+1][k+1][(d+A[n])%D]=max(dp[n+1][k+1][(d+A[n])%D],dp[n][k][d]+A[n])
- 選ばない場合
dp[n+1][k][d]=max(dp[n+1][k][d],dp[n][k][d])
dp[n][k][d]==-1のときはそもそも考えなくてええんや。つーか考えんな。そもそも「解が存在しない」んやから選ぶとか選ぶ以前の問題やな。
答えはモロチンdp[N][K][0]。
ACコード
defineは神。
巷には反define派をいう訳の分からない人たちがいるのをご存知だろうか。
この記事ではそんな可哀そうな人達の洗脳を解くためにdefineの様々な利点を挙げる。
便利
defineすることによってよく使う定型文的なものを一つに纏めることが出来る。
例えば、std::vectorのイテレータ、sort()するときに毎回.begin()と.end()を用意するのが面倒である。そんな時に
#define vecALL(vec) (vec).begin() , (vec).end()
と定義してあげれば、そんな煩わしいことをしなくて済む。
また、競プロなどでよくN次元配列(N=1,2)を入力として与えられることもあるがこの入力がまた面倒である。そんな時にも
#define vecIN(vec,n) for(int i= 0;i<(n);i++)cin>>(vec)[i] #define vvecIN(vec,i,j) for(int ip=0;ip<(i);ip++)for(int jp=0;jp<(j);jp++)cin>>(vec)[ip][jp]
このようにすれば未来永劫子々孫々生々世々万劫末代定型文を入力する苦痛な時間からfreeされる。
え、inline関数使えって?
黙れ。
inline関数だとIDEの色分けが普通の関数と一緒になって分かりにくくなり、一々定義まで戻ってこれはinlineで展開されるんだな、と確認しなければなくなる。
しかし、マクロだと大抵のIDEは関数と色分けが別なのでこれはマクロだな、展開されるんだな。という風になるのである。
また、これと同じ理論展開によりconstexprが普通の変数と見分けがつかないということも言える。
環境に良い
ライブラリを使用する時に、「この機能いらねぇなぁ~」とか「この機能ゴミだなぁ~」とか思ったことはないだろうか。
defineとifdefの合わせ技により利用者がいらんと思う機能をバッサリ切り捨て元から無かったようにできるのだ。
これにより実行ファイルの容量が減り、容量にとって優しくなれるのだ。
公平性の確保
constexprやinlineを使っているとdefineを使ったころにせっせこせっせこ動いてたプリプロセッサの出番が全てコンパイラに奪われてしまう。
人がAIに仕事を奪われる、という話がビルドで意図せず少々違う形ではあるが再現されてしまっていたのである。
こんなことはあってはならない。プリプロセッサに仕事を与えるという意味でもマクロは大切なのである。
最後に
これでdefineの重要性が分かっただろうか。それでもconstexprとdefineは同じなのでconstexprを使えという人がいるかもしれないが、そういう人達はもう脳が反defineに侵されてしまっているので手の打ち所がないので諦めるしかない。
しかし、大半のマトモな人たちはdefineが良いということが分かってくれたこであろう。そうであれば、私は十分である。
これからも反define派が出てこないことを祈り、また、不幸にも反define派になってしまった迷える子羊にはその洗脳がいち早く解けることを祈る。