定义f[i][j]为以(i,j)为最下边的菱形的最大边长,那么很明显答案就是∑f[i][j]。
#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const int N=1e5+3;
const int M=2e4+5;
const double eps=1e-8;
const int mod=998244353;
const int inf=0x7fffffff;
const double pi=3.1415926;
using namespace std;
int f[2005][2005];
char s[2005][2005];
signed main()
{
IOS;
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>s[i]+1;
}
int ans=0;
for(int ch=0;ch<26;ch++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(s[i][j]==ch+'a')
{
f[i][j]=1;
}
else
{
f[i][j]=0;
}
if(i>=3)
{
int num=min(min(f[i-1][j],f[i-1][j-1]),min(f[i-2][j],f[i-1][j+1]));
if(num!=0&&f[i][j]!=0)
{
f[i][j]=max(f[i][j],num+1);
}
}
ans+=f[i][j];
}
}
}
cout<<ans<<endl;
return 0;
}
本文地址:https://blog.csdn.net/ACkingdom/article/details/107888771
如对本文有疑问, 点击进行留言回复!!
Codeforces Round #662 (Div. 2) D. Rarity and New Dress
CodeForces 1393C Pinkie Pie Eats Patty-cakes
Codeforces Round #662 (Div. 2) A - Rainbow Dash, Fluttershy and Chess Coloring
网友评论