Ranking (as of 2015-03-25): 149 out of 234
Language: C++
/*
UVa 12187 - Brothers
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_12187_Brothers.cpp
*/
#include <algorithm>
#include <cstdio>
using namespace std;
const int R_max = 100, C_max = 100;
int countries[2][R_max][C_max];
int main()
{
const int nr_dirs = 4;
const int dirs[nr_dirs][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
while (true) {
int N, R, C, K;
scanf("%d %d %d %d", &N, &R, &C, &K);
if (!N)
break;
int (*pc)[R_max][C_max] = &countries[0], (*cc)[R_max][C_max] = &countries[1];
for (int i = 0; i < R; i++)
for (int j = 0; j < C; j++)
scanf("%d", &(*pc)[i][j]);
for (int k = 0; k < K; k++) {
for (int i = 0; i < R; i++)
for (int j = 0; j < C; j++)
(*cc)[i][j] = (*pc)[i][j];
for (int i = 0; i < R; i++)
for (int j = 0; j < C; j++)
for (int d = 0; d < nr_dirs; d++) {
int r = i + dirs[d][0], c = j + dirs[d][1];
if (r >= 0 && r < R && c >= 0 && c < C) {
int h = (*pc)[r][c];
if (!h)
h = N;
if ((*pc)[i][j] + 1 == h)
(*cc)[r][c] = (*pc)[i][j];
}
}
swap(pc, cc);
}
for (int i = 0; i < R; i++)
for (int j = 0; j < C; j++)
printf("%d%c", (*pc)[i][j], ((j < C - 1) ? ' ' : '\n'));
}
return 0;
}
No comments:
Post a Comment