Part 3
競プロのための Swift
競技プログラミングで頻出する Swift の道具を揃えます。
Dictionary や Set などのコレクション、タプル、ビット演算に加えて、 Swift 特有の注意点(オーバーフロー、文字列の添字、入出力の速度)も扱います。
- 数値型とオーバーフロー Int は 64 ビット。オーバーフローはクラッシュで気付ける。Double の誤差は整数の計算で避ける。
- タプルと型推論 値の組をタプルで束ねる。辞書順の比較と組み合わせて、多キーのソートを一行で書く。
- Dictionary と Set 集計は dict[key, default:0] += 1 の一行。存在判定は Set でほぼ一定時間にする。
- 構造体 座標や区間を struct にまとめる。Comparable に準拠して sorted() で並べられるようにする。
- ビット演算 2 進数の桁を直接操作する。集合をビットで表し、bit 全探索で選び方を全列挙する。
- クロージャと高階関数 定型句の { Int($0)! } の正体を明かす。map・filter・reduce とカスタムソートを使いこなす。
- 高速な入出力 print の連打は TLE のもと。出力は配列に貯めて joined で 1 回にまとめる定石を身につける。
- コンテストの戦い方 制約から解法を逆算し、サンプルを手で解いてから書く。WA チェックリストと ABC への挑み方。