2 条题解
-
0
#include<bits/stdc++.h> using namespace std; const int N=510; int n,m,A,B,a[N][N],s[N][N]; bool check(int x) { int now=0,sa=0; for (int i=1;i<=n;i++) { int sb=0; for (int j=1,t=0;j<=m;j++) if (t+(s[i][j]-s[i][j-1])-(s[now][j]-s[now][j-1])<x) t+=(s[i][j]-s[i][j-1])-(s[now][j]-s[now][j-1]); else sb++,t=0; if (sb>=B)now=i,sa++; } return sa>=A; } int main() { ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n>>m>>A>>B; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++)cin>>a[i][j]; memset(s,0,sizeof(s)); for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) s[i][j]=s[i-1][j]+s[i][j-1]+a[i][j]-s[i-1][j-1]; int L=0,R=s[n][m],ans=0; while (L<=R) { int mid=(L+R)/2; if (check(mid)) L=mid+1,ans=mid; else R=mid-1; } cout<<ans<<"\n"; return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int N=510; int n,m,A,B,a[N][N],s[N][N]; bool check(int x) { int now=0,sa=0; for (int i=1;i<=n;i++) { int sb=0; for (int j=1,t=0;j<=m;j++) if (t+(s[i][j]-s[i][j-1])-(s[now][j]-s[now][j-1])<x) t+=(s[i][j]-s[i][j-1])-(s[now][j]-s[now][j-1]); else sb++,t=0; if (sb>=B)now=i,sa++; } return sa>=A; } int main() { ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n>>m>>A>>B; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++)cin>>a[i][j]; memset(s,0,sizeof(s)); for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) s[i][j]=s[i-1][j]+s[i][j-1]+a[i][j]-s[i-1][j-1]; int L=0,R=s[n][m],ans=0; while (L<=R) { int mid=(L+R)/2; if (check(mid)) L=mid+1,ans=mid; else R=mid-1; } cout<<ans<<"\n"; return 0; }
- 1
信息
- ID
- 1557
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者