求求了,快疯了,悬2关!!!!
  • 板块灌水区
  • 楼主linjinkun
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/12/16 18:46
  • 上次更新2024/12/16 21:40:35
查看原帖
求求了,快疯了,悬2关!!!!
1120828
linjinkun楼主2024/12/16 18:46

求调 代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+5;
char a[N][N];
int q[N];
int f[N][N];
int l[N];
int r[N];
int dep[N];
int num[N];
void dfs(int x)
{
	dep[x] = 1;
	if(l[x])
	{
		dfs(l[x]);
		dep[x] = max(dep[x],dep[l[x]]+1);
	}
	if(r[x])
	{
		dfs(r[x]);
		dep[x] = max(dep[x],dep[r[x]]+1);
	}
}
int main()
{	
	int n,m;
	scanf("%d %d",&n,&m);
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			cin >> a[i][j];
		}
	}
	for(int i = 1;i<=n;i++)
	{
		for(int j = 1;j<=m;j++)
		{
			if(a[i-1][j] == 'F'&&a[i][j] == 'F')
			{
				f[i][j] = f[i-1][j]+(a[i][j] == 'F');
			}
			else if(a[i][j] == 'F')
			{
				f[i][j] = 1;
			}
		}
	}
	int maxx = 0;
	for(int i = 1;i<=n;i++)
	{
		memset(l,0,sizeof(l));
		memset(r,0,sizeof(r));
		int t = 0;
		for(int j = 1;j<=m;j++)
		{
			while(t&&f[i][q[t]]>f[i][j])
			{
				l[j] = q[t];
				t--;
			}
			if(t)
			{
				r[q[t]] = j;
			}
			q[++t] = j;
		}
		for(int j = 1;j<=m;j++)
		{
			num[l[j]] = i;
			num[r[j]] = i;
		}
		for(int j = 1;j<=m;j++)
		{
			if(num[j]!=i)
			{
				dfs(j);
				break;
			}
		}
		for(int j = 1;j<=m;j++)
		{	
			maxx = max(maxx,(dep[l[j]]+dep[r[j]]+1)*f[i][j]);
		}
	}
	printf("%d",maxx*3);
	return 0;
}
2024/12/16 18:46
加载中...