hi.轴对称

「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 mj+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 12 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 34 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 56 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 79 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 1012 45 45 45

对于 Subtask 2,保证每个变量等概率随机生成。

对于 100 % 100\% 100% 的数据, 1 ≤ n , m ≤ 100 1\le n,m\le 100 1n,m100 1 ≤ q ≤ 500 1\le q\le 500 1q500 1 ≤ i ≤ n 1\le i\le n 1in 1 ≤ j ≤ m 1\le j\le m 1jm t ∈ { 1 , 2 , 3 } t\in \{1,2,3\} t{1,2,3} 1 ≤ c ≤ 1 0 9 1\le c\le 10^9 1c109

代码内容

// #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;
}
  • 21
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pretty Boy Fox

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值