zoukankan      html  css  js  c++  java
  • cf之 前缀和差分

    给定一个n×n的WB矩阵,给定一个kk的能把B变成W的橡皮擦,求橡皮擦作用一次后,全为W的行、列总数最大值

    连接:http://codeforces.com/contest/1200/problem/D

    #include<bits/stdc++.h>
    using namespace std;
    int A[2004][2004];
    char C[2004][2004];
    int B[2004][2004];
    int E[2004][2004];
    int  F[2004][2004];
    int n,k;
    int main()
    {
        scanf("%d%d",&n,&k);
        int ans=0;
        for(int i=1; i<=n; i++)
        {
            getchar();
            for(int j=1; j<=n; j++)
            {
                C[i][j]=getchar();
                A[i][j]=A[i][j-1]+(C[i][j]=='B');
            }
            if(A[i][n]==0)ans++;
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                B[j][i]=B[j-1][i]+(C[j][i]=='B');
            }
            if(B[n][i]==0)ans++;
        }
        //cout<<ans<<'\n';
        int t=0,ma=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j+k-1<=n;j++){
                E[i][j]=E[i-1][j]+(A[i][j+k-1]-A[i][j-1]==A[i][n]&&A[i][n]);
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j+k-1<=n;j++){
                F[j][i]=F[j][i-1]+(B[j+k-1][i]-B[j-1][i]==B[n][i]&&B[n][i]);
            }
        }
        for(int i=1;i+k-1<=n;i++){
            for(int j=1;j+k-1<=n;j++){
                t=E[i+k-1][j]-E[i-1][j];
                t+=F[i][j+k-1]-F[i][j-1];
                ma=max(t,ma);
            }
    
        }
        cout<<ans+ma<<'\n';
    
    }
    

      

  • 相关阅读:
    (一)Sturts2概述
    day18,常用的模块,os,sys...等
    day17,模块的导入
    day16
    day15
    day14
    day13
    day12
    day11
    day10
  • 原文地址:https://www.cnblogs.com/hgangang/p/11830719.html
Copyright © 2011-2022 走看看