传送门
NOIP2022 T1种花 的 ( 细节 > 码量 ?加强 :弱化 ) 版
横竖分开讨论,枚举横线的端点和长度
预处理每个点向上或向下,取或不取m能贡献的最大长度
相较于种花少了一个方向,但因为m的存在需要加入大量苛刻的判断 ( 每个端点的每个方向是否要取m )
可以直接ifif+合并循环用1.5k左右碾过去
rep(j,1,m){
ll past=0,now=1;
for(ll i=dec?n:1;i>=1&&i<=n;i+=(dec?-1:1)){
g[i][j][dec][0]=now-1;
g[i][j][dec][1]=now+past-1;
if(Map[i][j]=='#') now=1,past=0;
else if(Map[i][j]=='m') past=now,now=1;
else now++;
}
}
rep(i,1,n) rep(l,1,m) rep(k,3,m-l+1){
ll r=l+k-1,tot=s[i][r][0]-s[i][l-1][0],lim=(!tot);
if(s[i][r][1]-s[i][l-1][1]||tot>1) break;
ll ret=0; for(ll y=l;y<=r;y+=r-l) rep(t,0,1){
ll id=y+t,upon,down;
upon=min(g[i][l][0][l==id?lim:0],g[i][r][0][r==id?lim:0]);
down=min(g[i][l][1][l+1==id?lim:0],g[i][r][1][r+1==id?lim:0]);
if(upon&&down) ret=max(ret,upon+down);
}
if(ret) ans=max(ans,ret*2+k);
}
思路很简单但为了压长度写了一个上午的邪门代码=_=