您的位置:首页 > 其它

UVa 10443 - Rock

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

每個細胞在一個週期內,會吧自己周圍的克制的細胞變成自己,問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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: