思路:
分别记录每个格子的 RGB 值,然后对于每一次修改,都暴力判断一下 (a,b,c)i,j 是否等于(a,b,c)i,m−j+1 即可。
题解:
#include<stdio.h>
typedef struct RGB
{
int left, mid, right;
}RGB;
int main()
{
RGB arr[100][100] = { 0 };
int n, m, q;
int i, j, t, c;
scanf("%d %d %d", &n, &m, &q); //输入行(n)列(m),和操作次数
while (q--)
{
scanf("%d %d %d %d", &i, &j, &t, &c); //输入操作元素的行(i)列(j),要修改的RBG的值(t),要增加的值(c)
//注:行列数要转化成数组下标要减一
if (t == 1)
{
arr[i - 1][j - 1].left += c;
arr[i - 1][j - 1].left %= 256; //取模
}
else if (t == 2)
{
arr[i - 1][j - 1].mid += c;
arr[i - 1][j - 1].mid %= 256;
}
else
{
arr[i - 1][j - 1].right += c;
arr[i - 1][j - 1].right %= 256;
}
//每修改一次就判断判断全部点是否满足条件,来判断图是否为轴对称
int t = 0;
for (int x = 1; x <= n; x++)
{
for (int y = 1; y <= m; y++)
{
if (arr[x - 1][y - 1].left == arr[x - 1][m - y - 1 + 1].left && arr[x - 1][y - 1].mid == arr[x - 1][m - y - 1 + 1].mid && arr[x - 1][y - 1].right == arr[x - 1][m - y - 1 + 1].right)
{
}
else
{
t = 1;
}
}
}
if (t == 0)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}