제출 #1232807

#제출 시각아이디문제언어결과실행 시간메모리
1232807lanaskaricaType Printer (IOI08_printer)C++20
0 / 100
34 ms29884 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long 
#define pii pair <int, int>
#define fi first
#define se second

const int MAXN = 1e6 + 5;

int cnt, d[MAXN];
bool ispisi[MAXN];
char slovo[MAXN];
string s;

vector <int> v[MAXN];
vector <char> rj;

void dodaj(int a, int idx) {
	int x = -1;
	for (auto e : v[a]) {
		if (slovo[e] == s[idx]) x = e; 
	}
	if (x == -1) {
		v[a].push_back(cnt);
		slovo[cnt] = s[idx];
		x = cnt; cnt++;
	}
	
	if (idx + 1 >= s.size()) {ispisi[x] = 1; return;}
	d[idx + 1] = d[idx] + 1;
	dodaj(x, idx + 1);
}

void dfs(int a) {
	if (ispisi[a] == 1) rj.push_back('P');
	int mx = 0, x = -1;
	for (auto e : v[a]) {
		if (d[e] > mx) {mx = d[e]; x = e;}
	}
	for (auto e : v[a]) {
		if (e == x) continue;
		rj.push_back(slovo[e]);
		dfs(e);
		rj.push_back('-');
	}
	if (x != -1) {
		rj.push_back(slovo[x]);
		dfs(x);
		rj.push_back('-');
	}
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	
	int n;
	cin >> n;
	
	cnt = 1;
	for (int i = 0; i < n; i++) {
		cin >> s; dodaj(0, 0);
	}
	
	dfs(0);
	
	int i = rj.size() - 1;
	while (rj[i] == '-') {rj.pop_back(); i--;} 
	
	for (auto e : rj) cout << e << "\n";
	
	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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...