Brothers
题目大意
给你一个矩阵,然后对于每个时刻,点权为 i 的点会使得它旁边四个位置点权是 (i+1)%n 的点变成 i。
然后问你经过 k 个时刻之后,矩阵的状态。
思路
直接模拟即可。
代码
#include<cstdio>
using namespace std;
int n, m, t, k, nono;
int a[101][101], b[101][101];
int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
bool kill;
bool ck(int x, int y) {
if (x < 1 || x > n) return 0;
if (y < 1 || y > m) return 0;
return 1;
}
int main() {
scanf("%d %d %d %d", &t, &n, &m, &k);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
scanf("%d", &a[i][j]);
while (k--) {
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) {
nono = a[i][j] - 1; kill = 0;
if (nono < 0) nono = t - 1;
for (int l = 0; l < 4; l++)
if (ck(i + dx[l], j + dy[l])) {
if (a[i + dx[l]][j + dy[l]] == nono) {
kill = 1;
break;
}
}
if (kill) b[i][j] = nono;
else b[i][j] = a[i][j];
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
a[i][j] = b[i][j];
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++)
printf("%d ", a[i][j]);
printf("\n");
}
return 0;
}