제출 #528085

#제출 시각아이디문제언어결과실행 시간메모리
528085aggrovectorType Printer (IOI08_printer)C++17
20 / 100
425 ms19060 KiB
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int n,trie[500005][26],last[500005],idx,i,e[500005];
string a[25005];

void insert(string x) {
	int l=x.length();
	int p=0;
	for (int i=0;i<l;i++) {
		if (trie[p][x[i]-'a']==0) {
			idx++;
			trie[p][x[i]-'a']=idx;
			p=trie[p][x[i]-'a'];
		}
		else {
			p=trie[p][x[i]-'a'];
		}
	}
	e[p]=1;
}

void insert1(string x) {
	int l=x.length();
	int p=0;
	for (int i=0;i<l;i++) {
		if (trie[p][x[i]-'a']==0) {
			idx++;
			trie[p][x[i]-'a']=idx;
			p=trie[p][x[i]-'a'];
		}
		else {
			p=trie[p][x[i]-'a'];
		}
		last[p]=1;
	}
	e[p]=1;
}

bool cmp(string x, string y) {
	int lx=x.length();
	int ly=y.length();
	return lx<ly;
}

void dfs(int x) {
	for (int i=0;i<26;i++) {
		if (trie[x][i]>0 && last[trie[x][i]]==0) {
			cout << char(i+'a') << endl;
			dfs(trie[x][i]);
		}
	}
	for (int i=0;i<26;i++) {
		if (trie[x][i]>0 && last[trie[x][i]]==1) {
			cout << char(i+'a') << endl;
			dfs(trie[x][i]);
		}
	}
	if (e[x]==1) {
		cout << 'P' << endl;
	}
	if (last[x]==0) {
		cout << '-' << endl;
	}
}

int main() {
	cin >> n;
	for (i=1;i<=n;i++) {
		cin >> a[i];
	}
	sort(a+1,a+1+n,cmp);
	for (i=1;i<n;i++) {
		insert(a[i]);
	}
	insert1(a[n]);
	last[0]=1;
	cout << idx*2+n-a[n].length() << endl;
	dfs(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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...