Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
128609 | 林扬泉 | 翻转棋盘2 | C++ | 解答错误 | 30 | 0 MS | 196 KB | 1614 | 2024-01-25 21:28:54 |
#include <cstdio> const int N = 17; char board[N][N]; char flip[N][N]; // 记录翻转的结果 bool isValid(int x, int y, int n) { return x >= 1 && x <= n && y >= 1 && y <= n; } void flipColor(int x, int y, int n) { if (isValid(x, y, n)) { if (flip[x][y] == 'b') { flip[x][y] = 'w'; } else { flip[x][y] = 'b'; } } } int flipBoard(int n) { int count = 0; // 记录翻转次数 for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { flip[i][j] = board[i][j]; // 将flip数组初始化为初始棋盘 } } // 翻转第一行 for (int i = 1; i <= n; i++) { if (board[1][i] == 'b') { flipColor(1, i, n); count++; } } // 翻转剩余行 for (int i = 2; i <= n; i++) { for (int j = 1; j <= n; j++) { if (flip[i-1][j] == 'b') { flipColor(i, j, n); count++; } } } // 检查最后一行是否全为同一种颜色 char color = flip[n][1]; for (int i = 2; i <= n; i++) { if (flip[n][i] != color) { return -1; // 无法完成翻转 } } return count; } int main() { int n; scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%s", board[i] + 1); } int result = flipBoard(n); if (result == -1) { printf("Impossible\n"); } else { printf("%d\n", result); } return 0; }