yokobuttonの不定期で競技プログラミングをするブログ

不定期で解けた競技プログラミングコンテストの問題を載せています。

AtCoder Beginner Contest 237 B - Matrix Transposition

問題の要約
 H行W列の行列Aが与えられる。
 Aの上からi行目、左からj列目の要素はAi,j。
 Aの転置行列Bを出力しろ。
制約
 1<=H,W<=10^5
 H*W<=10^5
 1<=Ai,j<=10^9
入力
 H W
 A1,1 ... A1,W
 ...
 AH,1 ... AH,W
考え方
 1,制約のH*W<=10^5より二重のfor文を使ってAからBを作成しても十分間に合う。
実際のプログラム
#include<iostream>
#include<vector>

using namespace std;

int main(){
  long H,W;
  cin >> H >> W;
  vector<vector<long>> A(H,vector<long>(W,0));
  for(long i = 0; i < H; i++){
    for(long j = 0; j < W; j++){
      cin >> A[i][j];
    }
  }
  vector<vector<long>> B(W,vector<long>(H,0));
  for(long i = 0; i < H; i++){
    for(long j = 0; j < W; j++){
      B[j][i] = A[i][j];
    }
  }
  for(long i = 0; i < W; i++){
    for(long j = 0; j < H; j++){
      cout << B[i][j] << " ";
    }cout << endl;
  }
  return 0;
}