Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
128609 林扬泉 翻转棋盘2 C++ 解答错误 30 0 MS 196 KB 1614 2024-01-25 21:28:54

Tests(3/10):


#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; }


测评信息: