// UVa 11906 - Knight in a War Grid
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <map>
using namespace std;
int move[4][2] = { { 1, 1 }, { 1, -1 }, { -1, 1 }, { -1, -1 } };
int grid[100][100], sol[2];
int r, c, m, n, w;
void dfs(int i, int j) {
grid[i][j] = 1;
map<int, bool> taken;
for (int k = 0; k < 4; k++) {
int a = i + move[k][0] * m;
int b = j + move[k][1] * n;
if (0 <= a && a < r && 0 <= b && b < c && grid[a][b] != -1 && !taken[a * 100 + b]) {
grid[i][j]++;
taken[a * 100 + b] = true;
if (grid[a][b] == 0)
dfs(a, b);
}
a = i + move[k][0] * n;
b = j + move[k][1] * m;
if (0 <= a && a < r && 0 <= b && b < c && grid[a][b] != -1 && !taken[a * 100 + b]) {
grid[i][j]++;
taken[a * 100 + b] = true;
if (grid[a][b] == 0)
dfs(a, b);
}
}
sol[grid[i][j] & 1]++;
}
int main() {
int tt;
cin >> tt;
for (int t = 1; t <= tt; t++) {
cin >> r >> c >> m >> n;
memset(grid, 0, sizeof(grid));
for (cin >> w; w; w--) {
int a, b;
cin >> a >> b;
grid[a][b] = -1;
}
memset(sol, 0, sizeof(sol));
if (grid[0][0] == 0)
dfs(0, 0);
printf("Case %d: %d %d\n", t, sol[1], sol[0]);
}
return 0;
}
Saturday, May 16, 2015
UVa 11906 - Knight in a War Grid
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment