公式

B - Langton's Takahashi 解説 by en_translator


Carefully do casework just as instructed in the sample code.

Depending on implementation, it may be good idea to use arrays that stores the delta of coordinates for each move, as in dx and dy in the sample code below.

Sample code

#include <bits/stdc++.h>
using namespace std;

int dx[] = { -1,0,1,0 }; int dy[] = { 0,1,0,-1 };

int main() {
    int h, w, n;
    cin >> h >> w >> n;
    vector<vector<char>> ans(h, vector<char>(w, '.'));
    int x = 0, y = 0, m = 0;
    for (int _ = 0; _ < n; _++) {
        if (ans[x][y] == '.') {
            ans[x][y] = '#';
            m++;
        }
        else {
            ans[x][y] = '.';
            m += 3;
        }
        m %= 4;
        x += dx[m]; y += dy[m];
        if (x < 0) x += h; if (x >= h) x -= h;
        if (y < 0) y += w; if (y >= w) y -= w;
    }
    for (int i = 0; i < h; i++) {
        for (int j = 0; j < w; j++) {
            cout << ans[i][j];
        }
        cout << '\n';
    }
}

投稿日時:
最終更新: