求调(样例WA 90分)
查看原帖
求调(样例WA 90分)
997660
garychu楼主2024/8/13 14:25
#include<bits/stdc++.h>
using namespace std;
const int N=505;
int R,C,A,B;
int a[N][N],s[N][N];
int l,r,mid;
bool check(int x){
	int a=0,b,p,t;
	bool fl;
	for(int i=1;i<=R;){
		for(int j=1;i+j-1<=R;j++){
			b=0,p=1;
			fl=false;
			for(int k=1;p+k-1<=C;k++){
				t=s[i+j-1][p+k-1]+s[i-1][p-1]-s[i-1][p+k-1]-s[i+j-1][p-1];
				if(t>=x){
					b++,p+=k;
					k=1;
					if(b==B){
						fl=true;
						break;
					}
				}
			}
			if(fl==true){
				a++;
				i+=j;
				break;
			}
			if(i+j-1==R)
				return false;
		}
		if(a==A)
			return true;
	}
	return false;
}
int main(){
	cin>>R>>C>>A>>B;
	for(int i=1;i<=R;i++)
		for(int j=1;j<=C;j++){
			cin>>a[i][j];
			s[i][j]=(s[i-1][j]+s[i][j-1]-s[i-1][j-1])+a[i][j];
		}
	l=0,r=s[R][C];
	while(l<r){
		mid=l+r+1>>1;
		if(check(mid))
			l=mid;
		else
			r=mid-1;
	}
	cout<<r;
	return 0;
}
2024/8/13 14:25
加载中...