洛谷P9198 题解

文章同时发表于:洛谷(GWBailang的Bolg),微信公众号(万物皆可编程)。

题目:「GMOI R2-T1」轴对称 - 洛谷

题目意思:

有一张图片,图片被分成了n*m个点,每个点都对应R,G,B三个值,初始时所有点都为(0,0,0)

现在有q次操作,对于每次操作如下:

输入i,j,t,c
i和j分别代表要操作的点的横坐标和竖坐标。
t代表要要改这个点的R/G/B(分别是1,2,3)
c代表这个点的R/G/B的值要加c,超过255就%256

每次更改完以后输出这张图片是否对称。

方法:

这是一道超水的题!

很明显这是一道暴力的题目

每次输入,改变,判断就可以了

最大的数据: n<=100 m<=100 q<=500

而我们判断是否对称的复杂度是O(q*n*m/2),暴力是不会TLE的!

上代码:

不懂看注释

#include<bits/stdc++.h>//万能头文件
using namespace std;
struct Node{
    int r=0,g=0,b=0;//R,G,B
}a[105][105];//每个点
int main(){
    int n,m,q;
    cin>>n>>m>>q;//输入
    long long x,y,t,c;//坐标和要改变的值
    while(q--){//循环q次
        cin>>x>>y>>t>>c;//输入
        c%=256;//后面要对256取模,所以这里可以先对c取模,否则可能int装不下
        if(t==1){//R
            a[x][y].r+=c;
            a[x][y].r%=256;//不要忘了对256取模
            //不能直接在这里判断两个点是否相同
            //因为如果上次加完就不对称,这次那个点还有可能是不对称的
        }
        if(t==2){//G,操作同上
            a[x][y].g+=c;
            a[x][y].g%=256;
        }
        if(t==3){//B,操作同上
            a[x][y].b+=c;
            a[x][y].b%=256;
        }
        int sf=0;//用于记录是否对称
        //这里我习惯用int,0代表对称,1代表不对称
        for(int i=1;i<=n;i++){//n行
            for(int j=1;j<=m/2;j++){//要判断左右对称,只用到m/2列即可,+1可以但是没必要
            //如果是奇数列,不用管中间那列,懂的都懂呵呵
            //如果是偶数列,每个点都会被看一遍的
                if(a[i][j].r!=a[i][m-j+1].r){//R
                //m-j+1列,题目说过了,只不过后来出题人好像有把这句话给删了
                    sf++;
                    break;//不对称就可以不用再往下找了
                }
                if(a[i][j].g!=a[i][m-j+1].g){//G,同上
                    sf++;
                    break;
                }
                if(a[i][j].b!=a[i][m-j+1].b){//B,同上
                    sf++;
                    break;
                }
            }
        }
        if(sf)cout<<"No"<<endl;//如果sf不是0,就说明不对称,输出NO
        else cout<<"Yes"<<endl;//否则输出Yes
        //注意大小写,不要输出错了!
    }
    return 0;
}

本蒟蒻第一次写题解,点个赞再走吧~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值