Google Code Jam 2022 Round2 参加記

abのみで12点 2205位で敗退しました...来年こそは!

 

 

A Spirailing Into Control

とりあえず部分点を考えます

K回以内に操作できるか?みたいなのは、DPテーブルに操作回数を持たせるのが多い気がします

今回も

dp[i][j][k] = (i,j)にいて操作回数がkのときに、どこからきたか?

と定義することで解くことができます

遷移は(i,j)の値が小さい順に愚直にやりましょう

Largeを考えてみますが、すぐにピンとくるわけではないので他の部分点を狙いにいきます

 

B Pixelated Circle

いかにもめんどくさそうで、roundとsqrtの誤差を適切に処理しないと愚直も落ちそうで嫌だなとなります

いったんLargeを考えますが思いつかないので、しかたなく愚直を書きます

さすがに小数をそのまま使うと落とされることは目に見えているので、式変形をして整数だけで判定できるようにします

round(x) = Aなら A-0.5 ≦ x < A+0.5であることを 利用すれば不等式で評価できます

とりあえずsmallは通したのでCにいきます

 

C Saving The Jelly

これもsmallを考えますが、N≦10の割にピンときません

N!を考えますが、さすがにO(N * N!)くらいは必要そうなので厳しそうです

となると、bitDPが定番なので考えてみると、子どもとお菓子をまとめてbitとして管理すればよいことに気づきます

あとはこのbitDPを実装するだけです、定数倍の高速化のためにあらかじめ2点間の距離は前計算しておきます

...が、WA

コードを読んでちょくちょく怪しいところを直しますが4WA

あまりに正しいコードになってしまいお手上げになりました

ここで粘ってて結局解けずに時間切れでした

 

終わった後にupsolveしたんですが、INFが小さすぎたのが原因でした

(ルートを外した)距離の最大値が

(10^9 - (-10^9)) ^ 2 + (10^9 - (-10^9)) ^ 2 = 8*10^18

となるので、ここまで広げなければいけません

考慮したつもりだったんですが、計算を間違ってました

ちゃんと丁寧に確認するべきでしたね

 

D I, O bot

部分点を取ろうと思ってちょっと見たんですが、すぐに思いつきはしなかったので解きませんでした

部分点だけで通るならabcdが必要だったので、これ倒せるくらいの実力はつけたいですね

 

総括

立ち回り難しい...

Aのlargeもちゃんと難しいと思ってたので、abcで通るかなと思ってたんですがそんなことなかったですね

今までのGCJの経験的に重実装部分点とるのは得意よりなので、ひとまず部分点を全部取ってLargeとしっかり勝負できればいいな