Submission #1006605

#TimeUsernameProblemLanguageResultExecution timeMemory
1006605vjudge1Vlak (COCI20_vlak)C++17
0 / 70
14 ms29276 KiB
#include <bits/stdc++.h>

using namespace std;

const int M = 2e5 + 1;

int nxt[M][26],dep[M],ind=0;
bool val[M],andd[M],nvald[M];
vector<int> nei[M],lev;

void add(string s, bool b=1)
{
	int cur=0,n=s.size();
	for (int i=0;i<n;i++)
	{
		if (nxt[cur][s[i]-'a']==-1)
			nxt[cur][s[i]-'a']=++ind,dep[ind]=dep[cur]+1,nei[cur].push_back(ind);
		if (dep[cur]%2==0 || !val[cur])
			val[cur]=b;
		cur=nxt[cur][s[i]-'a'];
	}
	if (dep[cur]%2==0 || !val[cur])
		val[cur]=b;
}

void caland(int u)
{
	bool le=nei[u].empty();
	andd[u]=1;
	for (int i:nei[u])
	{
		caland(i);
		andd[u]&=andd[i];
	}
	if (le)
		andd[u]=!val[u],lev.push_back(u);
}

void calnvald(int u)
{
	for (int i:nei[u])
		nvald[i]|=nvald[u],calnvald(i);
}

int main()
{
	for (int i=0;i<M;i++)
		for (int j=0;j<26;j++)
			nxt[i][j]=-1;
	int n,m;
	cin>>n;
	string s;
	for (int i=0;i<n;i++)
		cin>>s,add(s);
	cin>>m;
	for (int i=0;i<m;i++)
		cin>>s,add(s,0);
	caland(0);
	for (int u=0;u<M;u++)
	{
		if (dep[u]%2==0)
			continue;
		for (int i:nei[u])
			if (andd[i])
				nvald[u]=1;
	}
	calnvald(0);
	string ans="Emilija";
	for (int i:lev)
		if (!nvald[i])
			ans="Nina";
	cout<<ans<<endl;
	
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...