WA on #1,#2,#6,#7,#27,#28,跟std拍了几十组小数据,三组极限数据,没有发现任何问题
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
int main()
{
int n,m,t,ans=0;
cin>>n>>m>>t;
string s[n];
for (int i=0;i<n;i++) cin>>s[i];
int prefix[n][m],cur[m],a,b,c,d;
char color;
memset(prefix,0,sizeof(prefix));
memset(cur,0,sizeof(cur));
for (int i=0;i<n;i++) {
for (int j=0;j<m;j++) {
if (i) prefix[i][j]=prefix[i-1][j];
if (s[i][j]!='P') prefix[i][j]++;
}
}
for (int i=0;i<n;i++) {
for (int j=0;j<=i;j++) {
for (int k=0;k<m;k++) cur[k]=prefix[i][k]-(j?prefix[j-1][k]:0);
int p=0,q=0,tot=cur[0];
if (!tot&&q<m&&ans<(i-j+1)*(q-p+1)) {
ans=(i-j+1)*(q-p+1);
a=i,b=j,c=q,d=p,color='P';
}
while (q<m) {
if (p==q) {
q++;
tot+=cur[q];
}
else if (tot) {
tot-=cur[p];
p++;
}
else {
q++;
tot+=cur[q];
}
if (!tot&&q<m&&ans<(i-j+1)*(q-p+1)) {
ans=(i-j+1)*(q-p+1);
a=i,b=j,c=q,d=p,color='P';
}
}
}
}
memset(prefix,0,sizeof(prefix));
memset(cur,0,sizeof(cur));
for (int i=0;i<n;i++) {
for (int j=0;j<m;j++) {
if (i) prefix[i][j]=prefix[i-1][j];
if (s[i][j]!='B') prefix[i][j]++;
if (s[i][j]=='P') prefix[i][j]+=10086;
}
}
for (int i=0;i<n;i++) {
for (int j=0;j<=i;j++) {
for (int k=0;k<m;k++) cur[k]=prefix[i][k]-(j?prefix[j-1][k]:0);
int p=0,q=0,tot=cur[0];
if (tot<=t&&q<m&&ans<(i-j+1)*(q-p+1)) {
ans=(i-j+1)*(q-p+1);
a=i,b=j,c=q,d=p,color='B';
}
while (q<m) {
if (p==q) {
q++;
tot+=cur[q];
}
else if (tot>t) {
tot-=cur[p];
p++;
}
else {
q++;
tot+=cur[q];
}
if (tot<=t&&q<m&&ans<(i-j+1)*(q-p+1)) {
ans=(i-j+1)*(q-p+1);
a=i,b=j,c=q,d=p,color='B';
}
}
}
}
memset(prefix,0,sizeof(prefix));
memset(cur,0,sizeof(cur));
for (int i=0;i<n;i++) {
for (int j=0;j<m;j++) {
if (i) prefix[i][j]=prefix[i-1][j];
if (s[i][j]!='G') prefix[i][j]++;
if (s[i][j]=='P') prefix[i][j]+=10086;
}
}
for (int i=0;i<n;i++) {
for (int j=0;j<=i;j++) {
for (int k=0;k<m;k++) cur[k]=prefix[i][k]-(j?prefix[j-1][k]:0);
int p=0,q=0,tot=cur[0];
if (tot<=t&&q<m&&ans<(i-j+1)*(q-p+1)) {
ans=(i-j+1)*(q-p+1);
a=i,b=j,c=q,d=p,color='G';
}
while (q<m) {
if (p==q) {
q++;
tot+=cur[q];
}
else if (tot>t) {
tot-=cur[p];
p++;
}
else {
q++;
tot+=cur[q];
}
if (tot<=t&&q<m&&ans<(i-j+1)*(q-p+1)) {
ans=(i-j+1)*(q-p+1);
a=i,b=j,c=q,d=p,color='G';
}
}
}
}
for (int i=b;i<=a;i++) for (int j=d;j<=c;j++) s[i][j]=color;
cout<<ans<<endl;
for (int i=0;i<n;i++) cout<<s[i]<<endl;
//cout<<b<<' '<<a<<' '<<d<<' '<<c<<' '<<color;
return 0;
}