| 比赛 |
进阶指南第0章测试 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
Brownie Slicing G |
最终得分 |
100 |
| 用户昵称 |
小福鑫 |
运行时间 |
0.318 s |
| 代码语言 |
C++ |
内存使用 |
5.09 MiB |
| 提交时间 |
2026-03-14 09:58:05 |
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
int r,c,a,b,n[1001][1001],ans;
bool check(int x){
int p=0,q=0,cnta=0;
for(int i=1;i<=r;i++){
int cntb=0,q=0;
for(int j=1;j<=r;j++){
if(n[i][j]-n[p][j]-n[i][q]+n[p][q]>=x){
q=j;
cntb++;
}
}
if(cntb>=b){
p=i;
cnta++;
}
}
return cnta>=a;
}
signed main(){
freopen("brownie.in","r",stdin);
freopen("brownie.out","w",stdout);
cin>>r>>c>>a>>b;
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
cin>>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=2e9;
while(l<r){
int mid=(l+r)/2;
if(check(mid)){
ans=mid;
l=mid+1;
}
else{
r=mid;
}
}
cout<<ans;
}