16:矩阵剪刀石头布
- 总时间限制:
- 5000ms
- 内存限制:
- 65536kB
- 描述
-
Bart的妹妹Lisa在一个二维矩阵上创造了新的文明。矩阵上每个位置被三种生命形式之一占据:石头,剪刀,布。每天,上下左右相邻的不同生命形式将会发生战斗。在战斗中,石头永远胜剪刀,剪刀永远胜布,布永远胜石头。每一天结束之后,败者的领地将被胜者占领。
你的工作是计算出n天之后矩阵的占据情况。
- 输入
- 第一行包含三个正整数r,c,n,分别表示矩阵的行数、列数以及天数。每个整数均不超过100。
接下来r行,每行c个字符,描述矩阵初始时被占据的情况。每个位置上的字符只能是R,S,P三者之一,分别代表石头,剪刀,布。相邻字符之间无空格。 - 输出
- 输出n天之后的矩阵占据情况。每个位置上的字符只能是R,S,P三者之一,相邻字符之间无空格。
- 样例输入
-
3 3 1 RRR RSR RRR
- 样例输出
-
RRR RRR RRR
- 来源
- Waterloo local 2003.01.25
-
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 6 char a[110][110],b[110][110]; 7 int n,m,t; 8 9 int main() 10 { 11 cin >> n >> m >> t; 12 for(int i=1;i<=n;i++) 13 for(int j=1;j<=m;j++) 14 { 15 cin>>a[i][j]; 16 b[i][j]=a[i][j]; 17 } 18 for(int k=1;k<=t;k++) 19 { 20 for(int i=1;i<=n;i++) 21 for(int j=1;j<=m;j++) 22 { 23 if(a[i][j]=='R') 24 { 25 if(a[i-1][j]=='S')b[i-1][j]='R'; 26 if(a[i+1][j]=='S')b[i+1][j]='R'; 27 if(a[i][j-1]=='S')b[i][j-1]='R'; 28 if(a[i][j+1]=='S')b[i][j+1]='R'; 29 } 30 if(a[i][j]=='S') 31 { 32 if(a[i-1][j]=='P')b[i-1][j]='S'; 33 if(a[i+1][j]=='P')b[i+1][j]='S'; 34 if(a[i][j-1]=='P')b[i][j-1]='S'; 35 if(a[i][j+1]=='P')b[i][j+1]='S'; 36 } 37 if(a[i][j]=='P') 38 { 39 if(a[i-1][j]=='R')b[i-1][j]='P'; 40 if(a[i+1][j]=='R')b[i+1][j]='P'; 41 if(a[i][j-1]=='R')b[i][j-1]='P'; 42 if(a[i][j+1]=='R')b[i][j+1]='P'; 43 } 44 } 45 for(int i=1;i<=n;i++) 46 for(int j=1;j<=m;j++) 47 a[i][j]=b[i][j]; 48 } 49 for(int i=1;i<=n;i++) 50 { 51 for(int j=1;j<=m;j++) 52 cout << b[i][j]; 53 cout << " "; 54 } 55 return 0; 56 }