답안 #524890

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
524890 2022-02-10T08:32:55 Z tato Trener (COCI20_trener) C++14
0 / 110
33 ms 3872 KB
#include <bits/stdc++.h>
#define ll long long
#define pb push_back

using namespace std;
 
int n,k;
vector <string> v[51];
map <string,int> used;
vector <string> gd[51][1501];
ll p = 1e9+7;
map <string, ll> g;
 
bool check(string s, string l)
{
	int ind1 = 0, ind = 0;
 
	int ss = s.size();
	for(int i = 0; i < ss; i++)
		if(s[i] != l[i + 1])
			{
				ind = 1;
				break;
			}
	for(int i = 0; i < ss; i++)
		if(s[i] != l[i])
			{
				ind1 = 1;
				break;
			}
	
	if(ind == 1 and ind1 == 1)
		return false;
	else
		return true;
}
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].pb(s);
			}
	for(int i = 0; i < k; i++)
		used[v[1][i]] = 1;
		
	for(int m = 1 ; m < n; m++)
		for(int i = 0; i < k; i++)
			if(used[v[m][i]] == 1)
			for(int j = 0; j < k; j++)
				{
					if(check(v[m][i], v[m+1][j]))
						{
							gd[m][i].pb(v[m+1][j]);
							used[v[m+1][j]] = 1;
						}
				}
	
	for(int i = 0; i < k; i++)
	if(used[v[n][i]] == 1)
		g[v[n][i]] = 1;
		
	for(int m = n - 1; m > 0; m--)
		for(int i = 0; i < k; i++)
			if(used[v[m][i]] == 1)
			for(string j : gd[m][i])
				if(g[j] != 0 )
					g[v[m][i]] = (g[v[m][i]] + g[j]) % p;
					
	ll pas = 0;
	
				
	for(int i = 0; i < k; i++)
		pas = (pas + g[v[1][i]]) % p;
		
	cout << pas;
}
 
int main()
{
	int t = 1;
	
	//cin >> t;
	
	while(t--)
		answer();
	
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2088 KB Output is correct
2 Incorrect 1 ms 2096 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 33 ms 3872 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2088 KB Output is correct
2 Incorrect 1 ms 2096 KB Output isn't correct
3 Halted 0 ms 0 KB -