简洁易懂|带注释|题解
2025-08-22 11:51:45
发布于:上海
1阅读
0回复
0点赞
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
int N;
cin >> N;
vector<string> grid(N);
for (int i = 0; i < N; i++) {
cin >> grid[i];
}
// 记录每个位置被翻转的次数(奇数次为true,偶数次为false)
vector<vector<bool>> flipCount(N, vector<bool>(N, false));
int operations = 0;
// 从右下角向左上角遍历
for (int i = N-1; i >= 0; i--) {
for (int j = N-1; j >= 0; j--) {
// 当前实际状态:原始状态异或翻转次数
bool currentState = (grid[i][j] == '1') ^ flipCount[i][j];
// 如果需要翻转(当前为1)
if (currentState) {
operations++;
// 翻转从(0,0)到(i,j)的矩形区域
for (int x = 0; x <= i; x++) {
for (int y = 0; y <= j; y++) {
flipCount[x][y] = !flipCount[x][y];
}
}
}
}
}
cout << operations << endl;
return 0;
}
全部评论 1
制作不易,留赞后去
2025-08-22 来自 上海
0
有帮助,赞一个