이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define int long long
int val[505][505], pr[505][505], pc[505][505];
int calc(int x, int y, int depth, int length)
{
return pc[x+length-1][y+depth-1]-pc[x-1][y+depth-1]-pc[x+length-1][y-1]+pc[x-1][y-1];
}
int32_t main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int n, m, a, b; cin>>n>>m>>a>>b;
int ans=2e18;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
cin>>val[i][j];
}
}
for(int i=1; i<=n+2; i++)
{
for(int j=1; j<=m+2; j++)
{
pr[i][j]=pr[i][j-1]+val[i][j];
}
}
for(int j=1; j<=m+2; j++)
{
for(int i=1; i<=n+2; i++)
{
pc[i][j]+=pc[i-1][j]+pr[i][j];
}
}
for(int i=1; i<=n; i++)
{
for(int l=i; l<=n; l++)
{
int h=0;
for(int j=1; j<=m; j++)
{
while((pc[l][j]-pc[i-1][j])-(pc[l][h]-pc[i-1][h])>b&&h<=m) h++;
int x=(pc[l][j]-pc[i-1][j])-(pc[l][h]-pc[i-1][h]);
ans=min(ans, (abs(b-x)+abs(a-x)));
if(h)
{
int x=(pc[l][j]-pc[i-1][j])-(pc[l][h-1]-pc[i-1][h-1]);
ans=min(ans, abs(b-x)+abs(a-x));
}
}
}
}
cout<<ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |