답안 #524541

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
524541 2022-02-09T13:05:57 Z tato Trener (COCI20_trener) C++14
0 / 110
62 ms 3656 KB
#include <bits/stdc++.h>

using namespace std;





long long p = 1e9+7;
map <string, long long > mp;
long long pas = 0;
int n,k;
vector <string > v[51];
map <string,long long> g;
map <string,int> used;
vector <pair<int,int> > gd[51][1501];
bool check(string s, string l)
{
	

	if(s == l.substr(0,l.size() - 1) or s == l.substr(1))
		return true;
	else
		return false;
	
}

long long dfs(pair <int,int> par,int m)
{
	if(m == n + 1)
		return 1;
	
	used[v[par.first][par.second]]= 1;
	for(pair <int,int> i : gd[par.first][par.second])
		{
			long long cnt;
			if(used[v[i.first][i.second]]== 1)
				cnt = g[v[i.first][i.second]];
			else
			 cnt = dfs({i.first,i.second}, m + 1);
			g[v[par.first][par.second]] = (g[v[par.first][par.second]] + cnt) % p;
		}
			
	return  g[v[par.first][par.second]];
	
	
}

void answer()
{

	string s;
	cin >> n >> k;
	

	
	
	for(int i = 1; i <= n; i++)
		for(int j = 1; j <= k; j++)
			{
				cin >> s;
				v[i].push_back(s);
			}
	for(int m = 1; m < n; m++)	
	for(int i = 0; i < k; i++)
		{
			for(int j = 0; j < k; j++)
			if(check(v[m][i], v[m+1][j]))
				gd[m][i].push_back({m+1,j});
					
		}
			
	
	for (int i = 0; i < k; i++)
		pas = (dfs({1,i},2) + pas) % p;
	
	cout << pas;
	
	
}


int main()
{
	int t = 1;
	//cin >> t;
	
	while(t--)
		answer();
	
	
	
	
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 1996 KB Output is correct
2 Incorrect 1 ms 1996 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 62 ms 3656 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 1996 KB Output is correct
2 Incorrect 1 ms 1996 KB Output isn't correct
3 Halted 0 ms 0 KB -