C言語で書かれたプログラムを, C++に書き換えてみた.
題材として、AtCoder Beginner Contest 089 の 問題D(Practical Skill Test)を使ってみることにした。
但し、解答方針に関する理解は、まだまだ、出来てないように思うので(汗)、
C言語 -> C++ に翻訳してみることまでは、出来そうだったので、翻訳してみた。
なお、C言語で書かれたプログラムの詳細については、
本家のサイトABC 089 解説をご覧下さい。
■C++版プログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
// 解き直し. // ABC 089 解説. // https://img.atcoder.jp/abc089/editorial.pdf // 一部, C言語 から C++ に書き換えている. #include <iostream> using namespace std; #define abs(x) ((x > 0) ? x : (-(x))) #define FOR(i, a, b) for(int i=(a); i<(b); ++i) int main() { // 1. 入力情報取得. int H, W, D, A; int Q, L, R; int px[90001], py[90001]; int d[90001]; cin >> H >> W >> D; FOR(i, 0, H) FOR(j, 0, W) cin >> A, px[A] = i, py[A] = j; // 2. 魔力計算し, 出力. FOR(i, D + 1, H * W + 1) d[i] = d[i-D] + abs(px[i] - px[i-D]) + abs(py[i] - py[i-D]); cin >> Q; while (Q--) { cin >> L >> R; cout << (d[R] - d[L]) << endl; } // 3. 後処理. return 0; } |
■参照サイト
AtCoder Beginner Contest 089