제출 #1329474

#제출 시각아이디문제언어결과실행 시간메모리
1329474Muhammad_AneeqTrener (COCI20_trener)C++20
110 / 110
181 ms7852 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
int mod=1e9+7,fc=929;
bool mt(string a,string b)
{
    bool w=1;
    for (int i=0;i<a.size();i++)
    {
        if (a[i]==b[i]) continue;
        w=0;
        break;
    }
    if (w)
        return w;
    w=1;
    for (int i=0;i<a.size();i++)
    {
        if (a[i]==b[i+1]) continue;
        w=0;
        break;
    }
    return w;
}
int hsh(string a)
{
    int n=a.size();
    int ans=0;
    for (int i=0;i<n;i++)
    {
        ans=(ans*fc)+a[i];
        ans%=mod;
    }
    return ans;
}
inline void solve()
{
    int n,k;
    cin>>n>>k;
    string a[n][k];
    int hash[n][k][3]={};
    for (int i=0;i<n;i++)
        for (int j=0;j<k;j++)
        {
            cin>>a[i][j];
            hash[i][j][2]=hsh(a[i][j]);
            string s;
            for (int p=0;p<i;p++)
                s+=a[i][j][p];
            hash[i][j][0]=hsh(s);
            s={};
            for (int p=1;p<=i;p++)
                s+=a[i][j][p];
            hash[i][j][1]=hsh(s);
        }
    int dp[n][k]={};
    for (int i=0;i<k;i++)
        dp[0][i]=1;
    for (int i=0;i+1<n;i++)
    {
        for (int j=0;j<k;j++)
        {
            if (dp[i][j]==0) continue;
            for (int l=0;l<k;l++)
            {
                if ((hash[i][j][2]==hash[i+1][l][0])||(hash[i][j][2]==hash[i+1][l][1]))
                {

                    dp[i+1][l]+=dp[i][j];
                    if (dp[i+1][l]>=mod)
                        dp[i+1][l]-=mod;
                }
            }
        }
    }
    int ans=0;
    for (int i=0;i<k;i++)
    {
        ans+=dp[n-1][i];
        if (ans>=mod)
            ans-=mod;
    }
    cout<<ans<<endl;
}
signed main()
{
    ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    int t=1;
    for (int i=1;i<=t;i++)
    {
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...