Codeforces Round #662 (Div. 2) D. Rarity and New Dress

48 篇文章 0 订阅
7 篇文章 0 订阅

第一二层肯定是1,然后第三场在四个位置都符合要求就是2,然后这么一直往下,第(x,y)的值就是上面四个位置的值的最小值+1

(四个位置如下图)

 (对于最下面的绿色的d来说,红色圈的就是它的四个位置

 

Carousel Boutique is busy again! Rarity has decided to visit the pony ball and she surely needs a new dress, because going out in the same dress several times is a sign of bad manners. First of all, she needs a dress pattern, which she is going to cut out from the rectangular piece of the multicolored fabric.

The piece of the multicolored fabric consists of $$$n \times m$$$ separate square scraps. Since Rarity likes dresses in style, a dress pattern must only include scraps sharing the same color. A dress pattern must be the square, and since Rarity is fond of rhombuses, the sides of a pattern must form a $$$45^{\circ}$$$ angle with sides of a piece of fabric (that way it will be resembling the traditional picture of a rhombus).

Examples of proper dress patterns: Examples of improper dress patterns: The first one consists of multi-colored scraps, the second one goes beyond the bounds of the piece of fabric, the third one is not a square with sides forming a $$$45^{\circ}$$$ angle with sides of the piece of fabric.

Rarity wonders how many ways to cut out a dress pattern that satisfies all the conditions that do exist. Please help her and satisfy her curiosity so she can continue working on her new masterpiece!

Input

The first line contains two integers $$$n$$$ and $$$m$$$ ($$$1 \le n, m \le 2000$$$). Each of the next $$$n$$$ lines contains $$$m$$$ characters: lowercase English letters, the $$$j$$$-th of which corresponds to scrap in the current line and in the $$$j$$$-th column. Scraps having the same letter share the same color, scraps having different letters have different colors.

Output

Print a single integer: the number of ways to cut out a dress pattern to satisfy all of Rarity's conditions.

Examples

Input

Copy

3 3
aaa
aaa
aaa

Output

Copy

10

Input

Copy

3 4
abab
baba
abab

Output

Copy

12

Input

Copy

5 5
zbacg
baaac
aaaaa
eaaad
weadd

Output

Copy

31

Note

In the first example, all the dress patterns of size $$$1$$$ and one of size $$$2$$$ are satisfactory.

In the second example, only the dress patterns of size $$$1$$$ are satisfactory.

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll maxn = 2050;
char a[maxn][maxn];ll dp[maxn][maxn];
check(ll x,ll y)
{
    if(a[x][y]==a[x-1][y-1]&&a[x][y]==a[x-1][y]&&a[x][y]==a[x-1][y+1]&&a[x][y]==a[x-2][y])
    {
        return min(min(dp[x-1][y-1],dp[x-1][y]),min(dp[x-1][y+1],dp[x-2][y]))+1;
    }
    else return 1;
}
int main()
{
    ll n,m;
    scanf("%lld %lld",&n,&m);
    for(ll i=1;i<=n;i++) scanf("%s",a[i]+1);
    for(ll i=1;i<=m;i++) dp[1][i]=dp[2][i]=1;
    for(ll i=3;i<=n;i++)
    {
        for(ll j=1;j<=m;j++)
        {
            dp[i][j]=check(i,j);
        }
    }
    ll ans=0;
    for(ll i=1;i<=n;i++)
    {
        for(ll j=1;j<=m;j++)
        {
            ans+=dp[i][j];
        }
    }
    printf("%lld\n",ans);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值