Swift教室 Swift と競技プログラミングの教室

Part 3

競プロのための Swift

競技プログラミングで頻出する Swift の道具を揃えます。

Dictionary や Set などのコレクション、タプル、ビット演算に加えて、 Swift 特有の注意点(オーバーフロー、文字列の添字、入出力の速度)も扱います。

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