UVa 10443 - Rock

来源:互联网 发布:类的定义 c语言 编辑:程序博客网 时间:2024/05/17 16:15

題目:在一個二維平面上,有三種細胞剪刀、石頭、布,按照正常的遊戲規則想克制;

            每個細胞在一個週期內,會吧自己周圍的克制的細胞變成自己,問d天后的圖形。 

分析:簡單題,模擬。模擬每天的狀態求出第d天的即可。

            計算過程,用一個緩存,防止干擾。

說明:╮(╯▽╰)╭。

#include <cstring>#include <cstdio>char maps[101][101];char temp[101][101];int  dxy[4][2] = {0,1, 1,0, -1,0, 0,-1};int main(){int t, n, m, d;while (~scanf("%d",&t))while (t --) {scanf("%d%d%d",&n, &m, &d);for (int i = 0; i < n; ++ i)scanf("%s",maps[i]);for (int k = 0; k < d; ++ k) {for (int i = 0; i < n; ++ i)for (int j = 0; j < m; ++ j) temp[i][j] = maps[i][j];for (int i = 0; i < n; ++ i)for (int j = 0; j < m; ++ j) for (int p = 0; p < 4; ++ p) {int x = i + dxy[p][0];int y = j + dxy[p][1];if (x < 0 || x >= n || y < 0 || y >= m) continue;if (maps[x][y] == 'S' && maps[i][j] == 'P')temp[i][j] = 'S';if (maps[x][y] == 'P' && maps[i][j] == 'R')temp[i][j] = 'P';if (maps[x][y] == 'R' && maps[i][j] == 'S')temp[i][j] = 'R';}for (int i = 0; i < n; ++ i)for (int j = 0; j < m; ++ j) maps[i][j] = temp[i][j];}for (int i = 0; i < n; ++ i)puts(maps[i]);if (t) puts("");}    return 0;}


0 0