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 << "\n"; 54 } 55 return 0; 56 }