WA*6,求调
查看原帖
WA*6,求调
543206
shiroko2008楼主2022/8/9 21:23

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;
}
2022/8/9 21:23
加载中...