黑格子覆盖

2020-11-05  本文已影响0人  何景根
#include <cstring>
#include <iostream>
using namespace std;
int a[1050][1050],M,N,m,n,k,x,y,tm,tn,sum;
int main(){
    memset(a, 0, sizeof(a));
    cin>>M>>N>>m>>n>>k;
    for (int i=1; i<=k; i++) {
        cin>>x>>y;
        a[x][y]=1;
    }
    for (int i=1; i<=M; i++) {
        for (int j=1; j<=N; j++) {
            a[i][j]=a[i][j-1]+a[i][j];
        }
    }
    for (int i=1; i<=M; i++) {
        for (int j=1; j<=N; j++) {
            a[i][j]=a[i-1][j]+a[i][j];
        }
    }
    tm=m;
    tn=n;
    if(tm>M){
        tm=M;
    }
    if(tn>N){
        tn=N;
    }
    for (int i=tm; i<=M; i++) {
        for (int j=tn; j<=N; j++) {
            sum=max(sum,a[i][j]-a[i-tm][j]-a[i][j-tn]+a[i-tm][j-tn]);
        }
    }
    swap(m, n);
    tm=m;
    tn=n;
    if(tm>M){
        tm=M;
    }
    if(tn>N){
        tn=N;
    }
    for (int i=tm; i<=M; i++) {
        for (int j=tn; j<=N; j++) {
            sum=max(sum,a[i][j]-a[i-tm][j]-a[i][j-tn]+a[i-tm][j-tn]);
        }
    }
    cout<<sum;
}
上一篇 下一篇

猜你喜欢

热点阅读