PCK2017本選 参加記

PCK本選お疲れ様でした。

結果は、6AC5WAで上位入賞はできませんでした。
しかし、普段はtwitterでしか交流できない競技プログラマーの方と直接お話することができてとてもうれしかったです。

本選中にであった競技プログラマーの皆様。
https://twitter.com/kotatsugame_t/lists/pck2017/members

TLのトップ画が美少女でも、現実が美少女とは限らない

 という衝撃の事実に始まり。友利奈緒のかわいさ、るましのかばんは友利奈緒、実は例のカモノハシハが筆箱だった、こたつがめ氏がShell芸始めるらしい、大富豪は地方ルールがすごい、Platypus氏太鼓の達人がすごく上手い、会津大生滅茶苦茶やさしい(お客様扱いなのでそれはそう)、今年のテレビちゃんはMサイズだった、テレビちゃんはWA投げで3/6でゲットだった、会津購買は3種の神器がそろってる、TLE購買で買ってしまった。などなどとても充実した2日間でした。


 反省として大分はしゃいで自分を見失っていた感じがありました。
 

f:id:nasatame:20171107220849j:plain
ウクーニャさんとツーショットちなみに写真撮影者はbeetさんです。

ずいぶん駆け足になってしまいましたが参加記の方を閉めさせていただきます。
PCK本選で出会った全ての皆様本当にありがとうございました。あの2日間は忘れられないすばらしい時間でした。

しないわけにもいけないので駆け足で問題の解説をします。(実際の解説もかなり駆け足でした。)

1問目

 やるだけ。for,ifがあればなんとかなる。

2問目

 やるだけ。誤差が出ないように気をつける、分かりやすい変数名、double型を使わない。などがあれば特別賞を狙えたらしい。

3問目

 二人の誕生年月日から。二人の年の差の最大を求める問題。うるう年についての解説があるが結局無視して大丈夫だった。if文

4問目

 与えられた数の中から、最大の数を見つける。
 その数の公約数を列挙して、lower_boundする。
 結果を加算して解答。

5問目

 1日3回ご飯を出せる。ご飯を出す時刻を好きに決められる。
 N人のお客さんのそれぞれ朝ごはん、昼ごはん、夜ごはんを受け取れる時間が与えられる。
 3食食べられる、お客さんを最大化しなさい。
 お客さんのご飯を食べ始める時間にだけご飯を出すか試せばいいため、
 N <= 50 から 50*3 = 150 これを3回ご飯を出すため。
 (150 ^ 3) = 約3*10^7となる。
 前処理で、ご飯ごとにそれぞれ24*60=1440でlong long intの配列を作っておき食べれる人のorをとっておけば、andを使うことでO(1)で何人が3食すべて受け取れるか判定できる。
 この解法は、O(3*10^7*32)のため余裕で間に合う。

6問目

 与えられた2次元配列の行と行、列と列を入れ替える処理を行い市松模様を作れるかこたえよ。 
 正直、テストケース作りまくって力技で通したため考察はしていない。
 しかし、解説を聞いた限りだと存在する1の数が決まっている。2種類の列と行しか存在しない。などを使えば簡単に実装できるらしい。

7問目

 正直6問目と同じく運だけで解いた感がある。
 答えが8以下になる。
 3桁以上に分割する場合場合同じ桁数で分割するしか答えが8以下になるパターンは存在しない。など使えばいいらしい。
 2桁以下はDPでがんばる。


 総評、なぜ6ACできたのか謎。気づきがあった。(その割に次の日のARCで2問目をとけずレートを19も溶かした)(行きの仙台売店でCCさくら買ったのが良かったのかもしれない)