社区讨论

二分60pts TLEon#3#4#5#10

P3017[USACO11MAR] Brownie Slicing G参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mhju43tq
此快照首次捕获于
2025/11/04 08:32
4 个月前
此快照最后确认于
2025/11/04 08:32
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int MAXN=5e2+2;
int n,m,a,b,num[MAXN][MAXN];
int main(){
	scanf("%d%d%d%d",&n,&m,&a,&b);
	int L=1,R=0;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			scanf("%d",&num[i][j]);
			R+=num[i][j];
			num[i][j]+=num[i-1][j];
		}
	while(L<R){
		int mid=(L+R)/2;
		int up=0,cnt_a=0;
		for(int down=1;down<=n;down++){
			int cnt_b=0,z=0;
			for(int r=1;r<=m;r++){
				z+=(num[down][r]-num[up][r]);
				if(z>=mid){
					z=0;
					cnt_b++;
				}
			//	printf("mid=%d z=%d up=%d down=%d cnt_b=%d cnt_a=%d\n",mid,z,up,down,cnt_b,cnt_a);
			}
			if(cnt_b>=b){
				up=down;
				cnt_a++;
			}
		}
		if(cnt_a>=a) L=mid;
		else R=mid-1;
	}
	printf("%d",L); 
}

回复

2 条回复,欢迎继续交流。

正在加载回复...