Submission #453797

#TimeUsernameProblemLanguageResultExecution timeMemory
453797RGBBTrener (COCI20_trener)C++14
110 / 110
612 ms3528 KiB
#include <iostream>
#include <bits/stdc++.h>
#include <bitset>
using namespace std;
long prime=1000000007;
long base[50];
int main()
{
  	ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n;int k;
    cin>>n>>k;
    base[0]=1;
		for(int i=1;i<n;i++)base[i]=(26*base[i-1])%prime;
		int input[n][k][3];
		for(int i=0;i<n;i++)
		{
			for(int y=0;y<k;y++)
      {
        string a;cin>>a;
        long hash=0;
	    	int size=a.length();
	    	for(int i=0;i<size-1;i++)hash=(26*hash+a.at(i)  -'a')%prime;
	    	input[i][y][0]=hash;
	     	hash=(26*hash+a.at(size-1)-'a')%prime;
	    	input[i][y][2]=hash;
		    hash=(hash-(a.at(0)-'a')*base[size-1])%prime;
	  	  if(hash<0)hash+=prime;
	    	input[i][y][1]=hash;
      }
		}
    int dp[n][k];
		for(int i=0;i<k;i++)dp[0][i]=1;
    for(int i=1;i<n;i++)for(int y=0;y<k;y++)dp[i][y]=0;
		for(int i=0;i<n-1;i++)
		{
			for(int x=0;x<k;x++)
			{
				for(int y=0;y<k;y++)
				{
					if(input[i][x][2]==input[i+1][y][0]||input[i][x][2]==input[i+1][y][1])dp[i+1][y]=(dp[i+1][y]+dp[i][x])%prime;
				}
			}
		}
		int output=0;
		for(int i=0;i<k;i++)output=(output+dp[n-1][i])%prime;
		cout<<output;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...