Ranking (as of 2015-04-10): 91 out of 454
Language: C++
/*
UVa 447 - Population Explosion
To build using Visual Studio 2012:
cl -EHsc -O2 UVa_447_Population_Explosion.cpp
*/
#include <algorithm>
#include <cstdio>
using namespace std;
const int nr_quarters = 20;
char quarters[2][nr_quarters][nr_quarters + 1];
void init_quarters(char q[nr_quarters][nr_quarters + 1])
{
for (int i = 0; i < nr_quarters; i++)
for (int j = 0; j < nr_quarters; j++)
q[i][j] = ' ';
}
void print_quarters(char q[nr_quarters][nr_quarters + 1])
{
puts("********************");
for (int i = 0; i < nr_quarters; i++)
puts(q[i]);
}
int main()
{
const int nr_dirs = 8;
int dirs[nr_dirs][2] =
{{1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}, {0, -1}, {1, -1}};
int nr_cases;
scanf("%d", &nr_cases);
while (nr_cases--) {
int nr_years;
scanf("%d", &nr_years);
while (getchar() != '\n')
;
char (*pq)[nr_quarters][nr_quarters + 1] = &quarters[0],
(*cq)[nr_quarters][nr_quarters + 1] = &quarters[1];
init_quarters(*pq);
int c;
while ((c = getchar()) != '\n' && c != EOF) {
ungetc(c, stdin);
int i, j;
scanf("%d %d", &i, &j);
(*pq)[i - 1][j - 1] = 'O';
while (getchar() != '\n')
;
}
if (nr_years--)
print_quarters(*pq);
while (nr_years-- > 0) {
init_quarters(*cq);
for (int i = 0; i < nr_quarters; i++)
for (int j = 0; j < nr_quarters; j++) {
int n = 0;
for (int k = 0; k < nr_dirs; k++) {
int ci = i + dirs[k][0], cj = j + dirs[k][1];
if (ci >= 0 && ci < nr_quarters && cj >= 0 && cj < nr_quarters &&
(*pq)[ci][cj] == 'O')
n++;
}
if ((*pq)[i][j] == 'O') {
if (n == 2 || n == 3)
(*cq)[i][j] = 'O';
}
else {
if (n == 3)
(*cq)[i][j] = 'O';
}
}
print_quarters(*cq);
swap(pq, cq);
}
puts("********************");
if (nr_cases)
putchar('\n');
}
return 0;
}
No comments:
Post a Comment