反省点

マニュアル
left, right系はlとrで。
lcmによるオーバーフローに注意。
__builtin_popcountll


問題を読む時のコツ
丁寧に読む。
どうでもいいストーリー的な部分は飛ばす。
制約をちゃんと読む。
ノートをちゃんと利用。

コーディングのコツ
ミスの少なさを心がける。できるだけ直接的な表現を心がける。
理解があやふやなままにしない。ちゃんと確信しながら書く。
短く書く。
考えながらコーディングしない。
見直しをする。


REP(i,x2.size()) と書くべきところを
REP(i,n) と書いてしまった。

負の値に注意。計算結果が想定外の負の数になる場合に注意。

最後 ret = func(n,k) * func(m,k)でいいのに、
REP(i,k-1)ret+=func(n,i) * func(m,k-i) としてしまった。
n,aが与えられる。aが大きい場合は0になるので、aが小さいの場合のdpだけ書く。-> aが大きい場合の処理を忘れる。

二分探索で、足していく成分を2の冪にしていなかった。

continueと書くべきところをbreakと書いた。
メモ化再帰で、本当にちゃんと終了するか気をつける。アリーナでsegmentation faultが出ているときは、大体これが問題。

メモ

行ごとのプロファイルには gcovを使う。
愚直な方法でも間に合うかも。
集中力!
書いて消してを繰り返してたら無駄に時間を喰う。変に迷わず、一気に描き上げるぐらいのつもりで。
部分的にフェーズに分けて、「思考」→「コーディング」を繰り返す。


配列漏れはChallengeしにくいので諦める。
データを事前に無駄にいじるのはやめろ。いじるときは慎重に!

40^5でも通る。
dpは極力、メモ化再帰で解く。メモ化再帰が使えないパターンは珍しい。

とりあえず落ち着く。速度より正確さのほうが大事なことが多い。
絶対間違えないことを意識して解く。
問題の条件を何度も見返すことのないよう、できるだけ一回で叩き込む。
両側探索。
permutationを見たら、逆関数をとってみる。(CodeForcesRound131Div1Eなど)
出来るだけ事前に計算しない。
ややこしいときは出来るだけ関数定義を使用しまくる。これでずいぶん分かりやすく書ける。
区間は最大値と最小値で現すのが一番直感的で分かりやすい。
一次元メモ化再帰はスタックオーバーフローに気をつける。
残り時間が少なくて、大急ぎでコーディングするときに、intがオーバーフローのミス。
マンハッタン距離を見たら、とりあえず45度回転してみる。

タグ:

+ タグ編集
  • タグ:
最終更新:2013年08月02日 21:11