No.565 回転拡大 (行列の90度回転)

  • Quiz
  • 行列の回転(90度刻み)、拡大(整数倍)を実装せよ
  • その他
    • 90度回転を何度か重ねがけすることで180, 270度回転を実装すると楽
  • 注意※
    • 上記ACでは文字の行列を回転している(数字ではない)ので、数値行列の回転をしたい時はcharをllに書き換えること。(下記コードでは修正済み)

成果物

  • 行列の回転
  • 行列の拡大
  • 行列のPrint
// 時計回りに回転
VV rot90(VV mat){
    ll H = mat.size();
    ll W = mat[0].size();
    
    ll new_W = H;
    ll new_H = W;

    VV M(new_H);
    FOR(y, 0, new_H){
        for(ll i=H-1; i>=0; i--){
            ll c = mat[i][y]; // 型に注意 (char or long long)
            M[y].push_back(c);
        }
    }
    return M;
}

別の問題にて再利用。数値行列の回転

  • 「E-Lamps」にて、二次元配列を上下左右から累積を取る処理があり、同じようなコードが4つできる
  • これを回転で共通化できると思い、やってみたらできた
  • 😢ハマったのは、上記注意※でも書いているが、参考にしたrot90内にcharが混ざっていて特定ケースのみRE
  • 😢ライブラリは信じているので最後までチェックが遅れた
  • 😢同じようなコードをコピペしないというのは達成できたがハマる箇所も多かったのでコンテスト中は愚直に書いたほうがいいこともある。速い人も愚直に書いている
  • AC✅https://atcoder.jp/contests/hhkb2020/submissions/23107393