洛谷P4147 玉蟾宫
继续悬线法,参考上一篇博客可以秒切
代码:
#include<cstdio> #include<algorithm> #include<iostream> #define maxn 1010 using namespace std; int le[maxn][maxn],ri[maxn][maxn],up[maxn][maxn]; char mp[maxn][maxn]; int main() { int n,m; int ans=0; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { cin>>mp[i][j]; le[i][j]=ri[i][j]=j; up[i][j]=1; } for(int i=1;i<=n;i++) for(int j=2;j<=m;j++) if(mp[i][j]=='F'&&mp[i][j-1]=='F') le[i][j]=le[i][j-1]; for(int i=1;i<=n;i++) for(int j=m-1;j>=1;j--) if(mp[i][j]=='F'&&mp[i][j+1]=='F') ri[i][j]=ri[i][j+1]; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { if(i>1&&mp[i][j]=='F'&&mp[i-1][j]=='F') { le[i][j]=max(le[i-1][j],le[i][j]); ri[i][j]=min(ri[i-1][j],ri[i][j]); up[i][j]=up[i-1][j]+1; } int a=ri[i][j]-le[i][j]+1; ans=max(ans,a*up[i][j]); } printf("%d",3*ans); return 0; }