codeforces 549D

本文介绍了一种通过改变矩阵部分区域来将所有元素变为期望值的算法。从矩阵的右下角开始,逐行处理,确保每次操作都能改变左上角区域的状态,从而达到最终目的。适用于数据规模较小的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看的第一眼觉得还好,,,,感觉是一块用一次机会来变成数字,结果第四组样例明显是过不去了= =。。。。

找了找题解,,发现了好多什么说矩阵前缀和的,,,,那东西是什么鬼。。。。一副大家都会的样子= =。。。。。。

我想呀想呀想呀(看别人代码呀看呀看呀)原来就是每次的都要是有左上角的那个才行。。。(说的还算可以吧,,)就是相当于每次改变数字都要改变的是矩阵的左上部分。。。这样就有点难度了不过数据比较小直接暴力吧~~~~很容易想到肯定是先把右下角的搞掂,,,然后一行一行搞掂(一列一列应该也可以)不用搞的跳过用的直接整个左上角全变然后再遍历。。。。。23333333333太通俗易懂了。。。


//很简单很简单呀~~~~~

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;


int n,m,ans;
char b[101][101];
int a[101][101];

int main()
{
    int i,j,k,l;
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
        scanf("%s",b[i]);
    memset(a,0,sizeof(a));
    ans=0;
    for(i=n-1;i>=0;i--)
        for(j=m-1;j>=0;j--)
        {
            int q=(b[i][j]=='B'?1:-1);
            if(a[i][j]!=q)
            {
                ans++;
                //printf("%d %d\n",i,j);
                int temp=q-a[i][j];
                for(k=0;k<=i;k++)
                    for(l=0;l<=j;l++)
                        a[k][l]+=temp;
            }
        }
    printf("%d\n",ans);
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值