题目链接:P9198 「GMOI R2-T1」轴对称 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
https://www.luogu.com.cn/problem/P9198
首先,程序读取输入的图像大小(n、m)和查询次数(q)。然后,它创建一个三维的图像数组image,用于存储图像的RGB值。
int n, m, q;
cin >> n >> m >> q;
vector<vector<vector<int>>> image(n, vector<vector<int>>(m, vector<int>(3, 0)));
接下来,在每次查询中,程序读取图像的坐标(i、j)、通道值(t)和颜色增量值(c)。然后,它对应的图像数组元素进行更新,并调用函数check_symmetry来检查图像是否对称。如果图像水平方向上存在不对称的部分,则返回"No";否则,返回"Yes"。
while (q--) {
int i, j, t, c;
cin >> i >> j >> t >> c;
t--;
c %= 256;
image[i - 1][j - 1][t] = (image[i - 1][j - 1][t] + c) % 256;
cout << check_symmetry(image) << endl;
}
函数check_symmetry遍历图像的每一行,对每一行的像素进行检查。它比较像素的左右两侧的通道值,如果存在不相等的情况,则表示图像不对称,返回"No"。如果所有行都满足对称条件,则返回"Yes"。
string check_symmetry(const vector<vector<vector<int>>>& image) {
int n = image.size();
int m = image[0].size();
for (int i = 0; i < n; i++) {
for (int j = 0; j < m / 2; j++) {
bool symmetric = true;
for (int k = 0; k < 3; k++) {
if (image[i][j][k] != image[i][m - j - 1][k]) {
symmetric = false;
break;
}
}
if (!symmetric) {
return "No";
}
}
}
return "Yes";
}