「GMOI R2-T1」轴对称
题目描述
你有一个 n n n 行 m m m 列的图片(矩阵),该图片的像素为 n × m n\times m n×m。
初始时,所有像素块均为黑色,RGB 是 ( 0 , 0 , 0 ) (0,0,0) (0,0,0)。每一次操作可以将一个像素块的 RGB 中的一个数字改变。
在每次操作过后,请你输出图片是否左右对称?
左右对称:即对于任何的 i , j i,j i,j,总满足第 i i i 行第 j j j 列的像素与第 i i i 行第 m − j + 1 m-j+1 m−j+1 列的像素的 RGB 值相等。
输入格式
第一行三个整数 n , m , q n,m,q n,m,q, q q q 代表操作次数。
接下来 q q q 行,每行输入四个整数 i , j , t , c i,j,t,c i,j,t,c,表示将第 i i i 行第 j j j 列的格子的 RGB 值的第 t t t 个数增加 c c c,任何一个 RGB 值的任何一个数如果超出 255 255 255 则自动对 256 256 256 取模。
输出格式
每次操作过后,如果图片左右对称,输出 Yes
,否则输出 No
。每组询问的输出之间用换行隔开。
样例 #1
样例输入 #1
6 6 9
1 2 3 4
5 6 3 4
1 5 3 4
5 1 3 4
1 3 2 260
1 4 2 4
2 2 3 5
2 5 3 7
2 2 3 258
样例输出 #1
No
No
No
Yes
No
Yes
No
No
Yes
提示说明
本题使用 Subtask 捆绑测试。
Subtask | n ≤ n\le n≤ | m ≤ m\le m≤ | q ≤ q\le q≤ | t ≤ t\le t≤ | c ≤ c\le c≤ | 对应测试点 | 总分 |
---|---|---|---|---|---|---|---|
0 0 0 | 10 10 10 | 2 2 2 | 50 50 50 | 1 1 1 | 255 255 255 | 1 ∼ 2 1\sim2 1∼2 | 10 10 10 |
1 1 1 | 100 100 100 | 2 2 2 | 500 500 500 | 3 3 3 | 1 0 9 10^9 109 | 3 ∼ 4 3\sim4 3∼4 | 15 15 15 |
2 2 2 | 100 100 100 | 100 100 100 | 500 500 500 | 3 3 3 | 1 0 9 10^9 109 | 5 ∼ 6 5\sim6 5∼6 | 15 15 15 |
3 3 3 | 100 100 100 | 100 100 100 | 1 1 1 | 3 3 3 | 1 0 9 10^9 109 | 7 ∼ 9 7\sim9 7∼9 | 15 15 15 |
4 4 4 | 100 100 100 | 100 100 100 | 500 500 500 | 3 3 3 | 1 0 9 10^9 109 | 10 ∼ 12 10\sim12 10∼12 | 45 45 45 |
对于 Subtask 2,保证每个变量等概率随机生成。
对于 100 % 100\% 100% 的数据, 1 ≤ n , m ≤ 100 1\le n,m\le 100 1≤n,m≤100, 1 ≤ q ≤ 500 1\le q\le 500 1≤q≤500, 1 ≤ i ≤ n 1\le i\le n 1≤i≤n, 1 ≤ j ≤ m 1\le j\le m 1≤j≤m, t ∈ { 1 , 2 , 3 } t\in \{1,2,3\} t∈{1,2,3}, 1 ≤ c ≤ 1 0 9 1\le c\le 10^9 1≤c≤109。
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll p=256;
const ll N=1e3+10;
ll a[N][N],b[N][N],c[N][N];
bool find(ll n,ll m)
{
for(ll i=1;i<=n;i++)
for(ll j=1;j<=m;j++)
{
if(a[i][j]!=a[i][m-j+1]||b[i][j]!=b[i][m-j+1]||c[i][j]!=c[i][m-j+1])
return 0;
}
return 1;
}
int main()
{
ll n,m,q;
cin>>n>>m>>q;
while(q--)
{
ll i,j,t,q;
cin>>i>>j>>t>>q;
if(t==1) a[i][j]=(a[i][j]+q)%p;
if(t==2) b[i][j]=(b[i][j]+q)%p;
if(t==3) c[i][j]=(c[i][j]+q)%p;
if(find(n,m)) cout<<"Yes\n";
else cout<<"No\n";
}
return 0;
}