急
查看原帖
急
1015002
Charles_with_wkc楼主2024/6/28 21:40

在线IDE没有问题,编译过了样例过了,提交CE

#include<bits/stdc++.h>
using namespace std;
const int N=505;
int n,m,k; 
struct ansn{
	int ans=0,l=0,r=0,yl=0,yr=0;
};
ansn ans;
char a[N][N];
int cnt[N][N],sum[N][N];
bool cheak1(int xl,int xr,int yl,int yr){
	if(cnt[xr][yr]-cnt[xr][yl-1]-cnt[xl-1][xr]+cnt[xl-1][yl-1]>0){
		return 0;
	}
	if(sum[xr][yr]-sum[xr][yl-1]-sum[xl-1][xr]+sum[xl-1][yl-1]<=k){
		return 1;
	}
	if(sum[xr][yr]-sum[xr][yl-1]-sum[xl-1][xr]+sum[xl-1][yl-1]>=(xr-xl+1)*(yr-yl+1)-k){
		return 1;
	}
	return 0;
}
bool cheak2(int xl,int xr,int yl,int yr){
	if(cnt[xr][yr]-cnt[xr][yl-1]-cnt[xl-1][xr]+cnt[xl-1][yl-1]==(xr-xl+1)*(yr-yl+1)){
		return 1;
	}
	else{
		return 0;
	}
}
void outside(){
	cout<<ans.ans<<endl;
	if(cheak2(ans.l,ans.r,ans.yl,ans.yr)){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cout<<'P';
			}
			cout<<endl;
		}
	}
	else if(sum[ans.r][ans.yr]-sum[ans.r][ans.yl-1]-sum[ans.l-1][ans.r]+sum[ans.l-1][ans.yl-1]<=k){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				if(i>=ans.l&&i<=ans.r&&j>=ans.yl&&j<=ans.yr){
					cout<<'G';
				} 
				else{
					cout<<a[i][j];
				}
			}
			cout<<endl;
		}
	}
	else{
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				if(i>=ans.l&&i<=ans.r&&j>=ans.yl&&j<=ans.yr){
					cout<<'B';
				}
				else{
					cout<<a[i][j];
				}
			}
			cout<<endl;
		}
	}
	return ;
}
int main(){
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++){
		cin>>(a[i]+1);
		for(int j=1;j<=m;j++){
			sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+(a[i][j]=='B');
			cnt[i][j]=cnt[i-1][j]+cnt[i][j-1]-cnt[i-1][j-1]+(a[i][j]=='P');
		}
	}
	for(int yl=1;yl<=n;yl++){
		for(int yr=1;yr<=m;yr++){
			int l=1,r=0;
			while(l<=n&&r<=n){
				while(r<n&&cheak1(l,r+1,yl,yr)){
					r++;
				}
				if((yr-yl+1)*(r-l+1)>ans.ans){
					ans.ans=(yr-yl+1)*(r-l+1);
					ans.l=l;
					ans.r=r;
					ans.yl=yl;
					ans.yr=yr;
				}
				l++;
			}
		}
	}
	for(int yl=1;yl<=n;yl++){
		for(int yr=1;yr<=m;yr++){
			int l=1,r=0;
			while(l<=n&&r<=n){
				while(r<n&&cheak2(l,r+1,yl,yr)){
					r++;
				}
				if((yr-yl+1)*(r-l+1)>ans.ans){
					ans.ans=(yr-yl+1)*(r-l+1);
					ans.l=l;
					ans.r=r;
					ans.yl=yl;
					ans.yr=yr;
				}
				l++;
			}
		}
	}
	outside();
	return 0;
}
2024/6/28 21:40
加载中...