P8472求调
  • 板块学术版
  • 楼主allenchoi
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/12/31 22:50
  • 上次更新2023/10/24 05:58:17
查看原帖
P8472求调
298037
allenchoi楼主2022/12/31 22:50

RT

#include <cstdio>
#include <cstring>
using namespace std;
int n,m,k,cl,h1,h2,l1,l2,ans,top,s[510][510][3],st[510],id[510],nxt[510];
char ch,jz[510][510];
int _max(int x,int y){return x > y ? x : y;}
int qry(int c,int x1,int y1,int x2,int y2){return s[x1][x2][c] - s[x2][y1 - 1][c] - s[x1 - 1][y2][c] + s[x1 - 1][y1 - 1][c];}
int main()
{
	scanf("%d%d%d",&n,&m,&k);
	for(int i = 1;i <= n;i++)
	{
		scanf("\n");
		for(int j = 1;j <= m;j++)
		{
			scanf("%c",&ch);
			jz[i][j] = ch;
			s[i][j][0] = s[i - 1][j][0] + s[i][j - 1][0] - s[i - 1][j - 1][0];
			s[i][j][1] = s[i - 1][j][1] + s[i][j - 1][1] - s[i - 1][j - 1][1];
			s[i][j][2] = s[i - 1][j][2] + s[i][j - 1][2] - s[i - 1][j - 1][2];
			if(ch == 'B') s[i][j][0]++;
			if(ch == 'G') s[i][j][1]++;
			if(ch == 'P') s[i][j][2]++;
		}
	}
	for(int c = 0;c <= 1;c++)
		for(int i = 1;i <= n;i++)
			for(int j = i;j <= n;j++)
				for(int l = 1,r = 1;r < m;)
				{
					while(!qry(2,i,r + 1,j,r + 1) && qry(c ^ 1,i,l,j,r + 1) <= k && r < m) r++;
					if((j - i + 1) * (r - l + 1) > ans)
					{
						ans = (j - i + 1) * (r - l + 1);
						cl = c;
						h1 = i,h2 = j;
						l1 = l,l2 = r;
					}
					if(qry(2,i,r + 1,j,r + 1) || qry(c ^ 1,i,r + 1,j,r + 1) > k)
					{
						r++;
						while((qry(2,i,r,j,r) || qry(c ^ 1,i,r,j,r) > k) && r < m) r++,l = r;
					}
					while(qry(c ^ 1,i,l,j,r + 1) > k && l <= r) l++;
				}
	for(int i = 1;i <= n;i++)
		for(int j = i;j <= n;j++)
			for(int l = 1,r = 1;r < m;r = l)
			{
				while(qry(2,i,r + 1,j,r + 1) == j - i + 1 && r < m) r++;
				ans = _max(ans,(r - l + 1) * (j - i + 1));
				l = r + 1;
				while(qry(2,i,l,j,l) != j - i + 1 && l < m) l++;
			}
	if(cl == 0) ch = 'B';
	else ch = 'G';
	for(int i = h1;i <= h2;i++)
		for(int j = l1;j <= l2;j++)
			jz[i][j] = ch;
	printf("%d\n",ans);
	for(int i = 1;i <= n;i++)
	{
		for(int j = 1;j <= m;j++) printf("%c",jz[i][j]);
		printf("\n");
	}
	return 0;
}
2022/12/31 22:50
加载中...