比赛 进阶指南第0章测试 评测结果 AAAAAAAAAA
题目名称 Brownie Slicing G 最终得分 100
用户昵称 rzzakioi 运行时间 0.197 s
代码语言 C++ 内存使用 2.02 MiB
提交时间 2026-03-14 09:53:06
显示代码纯文本
#include<cstdio>
using namespace std;
int r,c,a,b,n[505][505];
bool check(int k){
    int x=0,y=0,res=0;
    for(int i=1;i<=r;i++){
        int num=0;
        y=0;
        for(int j=1;j<=c;j++){
            if(n[i][j]-n[x][j]-n[i][y]+n[x][y]>=k){
                y=j;
                num++;
            }
        }
        if(num>=b){
            x=i;
            res++;
        }
    }
    return res>=a;
}
int main(){
    freopen("brownie.in","r",stdin);
    freopen("brownie.out","w",stdout);
    scanf("%d%d%d%d",&r,&c,&a,&b);
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
            scanf("%d",&n[i][j]);
        }
    }
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
            n[i][j]+=n[i][j-1];
        }
    }
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
            n[i][j]+=n[i-1][j];
        }
    }
    int l=0,r=1e9,ans=0;
    while(l<=r){
        int mid=(l+r)>>1;
        if(check(mid)){
            l=mid+1;
            ans=mid;
        }
        else r=mid-1;
    }
    printf("%d",ans);
    return 0;
}