| 比赛 |
进阶指南第0章测试 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
Brownie Slicing G |
最终得分 |
100 |
| 用户昵称 |
2_16鸡扒拌面 |
运行时间 |
0.332 s |
| 代码语言 |
C++ |
内存使用 |
4.51 MiB |
| 提交时间 |
2026-03-14 10:01:27 |
显示代码纯文本
#include<bits/stdc++.h>
#define MAXN 505
#define ll long long
using namespace std;
int r,c,a,b;
int g[MAXN][MAXN],s[MAXN][MAXN];
int q(int x1,int y1,int x2,int y2){return s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1];}
bool check(int x)
{
int row=0,lr=1;
for(int i=1;i<=r;i++)
{
int col=0,lc=1;
for(int j=1;j<=c;j++)
{
if(q(lr,lc,i,j)>=x)
{
col++;
lc=j+1;
}
}
if(col>=b)
{
row++;
lr=i+1;
}
}
return row>=a;
}
int 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>>g[i][j];
for(int i=1;i<=r;i++)
for(int j=1;j<=c;j++)
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+g[i][j];
ll L=0,rr=s[r][c],ans=0;
while(L<=rr)
{
int mid=(L+rr)/2;
if(check(mid))
{
ans=mid;
L=mid+1;
}
else rr=mid-1;
}
cout<<ans<<endl;
return 0;
}