Submission #1194457

#TimeUsernameProblemLanguageResultExecution timeMemory
1194457nquangCezar (COCI16_cezar)C++17
70 / 100
1 ms328 KiB
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 110;
set<int> adj[N];
short int vst[N];
string s[N];
int p[N];
char ch[26];
vector<int> topo;
bool cycle = 0;
void dfs(int u);

int main (int argc, char const *argv[]) {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int n; cin >> n;	
	for(int i = 1; i <= n; ++i) cin >> s[i];
	for(int i = 1; i <= n; ++i) cin >> p[i];
	memset(ch, 0, sizeof(ch));
	vector<string> arr;
	for(int i = 1; i <= n; ++i) arr.push_back(s[p[i]]);
	for(int i = 0; i < n; ++i){
		for(int j = i + 1; j < n; ++j){
			bool g = 0;
			for(int id = 0; id < arr[i].length() && id < arr[j].length(); ++id){
				if(arr[i][id] != arr[j][id]){
					adj[arr[i][id] - 'a'].insert(arr[j][id] - 'a');
					g = 1;
					break;
				}
			}
			if(g) continue;
			if(arr[i].length() > arr[j].length()){
				cout << "NE";
				return 0;
			}
		}
	}
	for(int i = 0; i < 26; ++i){
		if(vst[i] == 0 && adj[i].size()) dfs(i);
	}
	if(cycle) {
		cout << "NE";
		return 0;
	}
	reverse(topo.begin(), topo.end());
	char c = 'a';
	for(int x : topo){
		ch[x] = c++;
	}
	cout << "DA\n";
	for(int i = 0; i < 26; ++i) cout << (ch[i] == 0 ? c++ : ch[i]);
	return 0;
}
void dfs(int u){
	if(cycle) return;
	if(vst[u] == 2) return;
	if(vst[u] == 1){
		cycle = 1;
		return;
	}
	vst[u] = 1;
	for(int v : adj[u]){
		dfs(v);
	}
	vst[u] = 2;
	topo.push_back(u);
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...