在线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;
}