Ranking (as of 2013-07-27): 181 out of 1122
Language: C++
/*
UVa 10443 - Rock
To build using Visual Studio 2010:
cl -EHsc -O2 UVa_10443_Rock.cpp
*/
#include <cstdio>
const int r_max = 100, c_max = 100;
char grids[2][r_max][c_max + 1];
char war(char ci, char cj)
{
/*
P Q R S
P P - P S
Q - - - -
R P - R R
S S - R S
*/
const char wars[4][4] = {
// wars[ci][cj] is the result of war between (ci - 'P') and (cj - 'P')
{'P', '\0', 'P', 'S'},
{'\0', '\0', '\0', '\0'},
{'P', '\0', 'R', 'R'},
{'S', '\0', 'R', 'S'}
};
return wars[ci - 'P'][cj - 'P'];
}
int main()
{
int t;
scanf("%d", &t);
while (t--) {
int r, c, n;
scanf("%d %d %d", &r, &c, &n);
for (int i = 0; i < r; i++)
scanf("%s", grids[0][i]);
for (int k = 1; k <= n; k++) {
int ck = k % 2, pk = (k - 1) % 2;
for (int i = 0; i < r ; i++)
for (int j = 0; j < c; j++) {
char cc, pc = grids[pk][i][j];
if (i && (cc = war(pc, grids[pk][i - 1][j])) != pc ||
i < r - 1 && (cc = war(pc, grids[pk][i + 1][j])) != pc ||
j && (cc = war(pc, grids[pk][i][j - 1])) != pc ||
j < c - 1 && (cc = war(pc, grids[pk][i][j + 1])) != pc)
grids[ck][i][j] = cc;
else
grids[ck][i][j] = pc;
}
}
for (int i = 0; i < r; i++) {
grids[n % 2][i][c] = '\0';
puts(grids[n % 2][i]);
}
if (t)
putchar('\n');
}
return 0;
}
No comments:
Post a Comment