そーすにっき

なんかいろいろのせておくばしょ

GCJ 2018

概要

  • Google Code Jamに出ました
  • Round2敗退
  • 反省点等のメモ書きが多少

経過

  • Practiceは何もわからず(存在忘れており)パス
  • Qual Round (通過条件:25Pt)
    • ABcD 80Pt / 100Pt
    • #900 / 24584 通過
  • Round1A (通過条件:\#1500以内)
    • a 9Pt
    • #3467 / 5172 敗退
  • Round1B (通過条件:\#1500以内)
    • A 25Pt
    • #1158 / 4811 通過
  • Round1C (通過条件:\#1500以内)
    • 不参加(Bで通過している為)
  • Round2 (通過条件:\#1000以内)
    • AB 41Pt
    • #1208 敗退

詳細

以下テストケース数はTとしておきます
印象に残った問題を載せていきます
全部はめんどい…

Qual Round

Go Gopher!

インタラクティブ問題
問題文
[1,1000]^2のグリッドがあり、1マスずつ座標を指定して(i,j)として渡すと
[i-1,i+1][j-1,j+1]のマスを塗ったという報告が返ってくる(9マスは等確率で選ばれる)
入力として与えられるAマスを超える長方形を1000回以内に塗りつぶせ

制約
T \leq 20
small:
A = 20
large:
A = 200

考察
同じマスを指定し続けると3*3の9マスを埋めるのに期待値上25.4回ほどかかる
3 * (3 * k) >= Aとなるようにひたすら3マスずつ指定するマスを動かすと
A = 200の場合 207 = 23 * 9より 23 * 25.4 = 586回ほどで期待値的には終わる
…が、乱数酷いと永遠に終わらないわけでSubmit繰り返せという辺りがなかなか
確かに何回もWAになることはないんだろうけども

Cubic UFO

(0,0,0)に中心を持つ各辺1,xy,yz,xz平面に平行な面を持つ立方体に回転行列をかけてz = -1平面への射影の面積を入力の値S通りにしなさい

制約
small:
S <= \sqrt{2}
large:
S <= \sqrt{3}

考察
とりあえずx軸からz軸の方向に45°傾けるとちょうど面積が\sqrt{2}になってそこからいくらかy軸からz軸の方向に傾けると面積が\sqrt{3}になる角が存在しそう(実際存在する)
ということでsmallケースとlargeケースで場合分け
いずれも角度を二分探索

十分高速に動作して終了

ちなみに立方体ABCD-EFGHのz平面への射影が極大になるのは正三角形AC(F,G)がz平面に水平になる角なんだとか

Round1B

Rounding Error

問題
分数を%にする
このとき小数点を四捨五入すると元の分数の和が1にも関わらず和が100%にならない場合がある
ex: 1/6 + 1/6 + 1/6 + 1/6 + 1/6 + 1/6 = 17% * 6 = 102%
アンケートがあり、回答を集計中で、回答者はN人、集計済みがK人おり、K人をそれぞれ数列Aに分けてある
残りのN-K人によって最大で分数を%にした時の和が何%になるかを出力せよ
ex: N=6, K=4, A={3,1}の場合{3,1,1,1}や{4,1,1}の場合に101%

制約
 T \leq 100 , 10sec
large:
[tex: K

Round2

Graceful Chainsaw Jugglers

問題
ピエロにチェーンソーを持たせてパフォーマンスをさせる
チェーンソーは2色ありR,Bとして各色のチェーンソーの数が与えられる
ピエロはそれぞれ違う数の組み合わせのチェーンソーを持たせられる
最大で何人同時にピエロにパフォーマンスさせられるか

ex: R = 4, B = 5の場合
(R,B) = (0,1)(0,3)(1,0)(2,0)(1,1)の5人のピエロが同時にパフォーマンス出来る これが最大(他にも最大の答えはある)

制約
 T \leq 100, 25sec
large:
 R,B<=500

考察
前処理DPをすれば1テストケースに対してO(1)で回答できるのでギリギリO(RBRB)の愚直DPが通りそう
dp[R][B]として
もたせうる(i,j)組み合わせ全てに対して
dp[R+i][B+j] = max(dp[R+i][B+j],dp[R][B]+1)とする
前進するとダブるので後退更新すればO(RBRB)
愚直に実装するとTLEで、R

Costume Change

問題
N*N人が正方形に並んでいる
服の種類が-N,...,-1,1,...,Nあり、同じ列と同じ行に同じ服がいないようにしたい
元の服の種類が行列で与えられるので最小の服変更人数を出力せよ

考察
できなかった
貪欲は通らず
解説で種類ごとに行と列の二部グラフを作り、最大独立集合の要素数をN*Nから引いたのが答えと知って唖然
フローに対する典型力が足りませんでした

感想

Atcoderのレートの割には健闘したと思います
どうやら時間長めのコンテストに強い?のかもしれない
ICPC今年こそ予選通過したるという強い気持ちで精進します

Gennady強すぎ…強すぎない?