답안 #531476

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
531476 2022-02-28T19:25:07 Z Pietra Type Printer (IOI08_printer) C++14
30 / 100
47 ms 21992 KB
#include<bits/stdc++.h>
using namespace std ; 

//monta trie 
// percorre ela com dfs 
// chegou ao fim printa 
// qd sobe coloca - 

const int maxn = 6e5 + 5 ; 

int n, trie[maxn][28], ctt, qtd[maxn], fim[maxn], ct ; 
string s ; 
vector<char> resp ; 

void add(string s){

	int root = 0 ; 

	for(int i = 0 ; i < (int) s.size() ; i++){
		if(trie[root][s[i]-'a'] == 0) trie[root][s[i]-'a'] = ++ct ; 
		root = trie[root][s[i]-'a'] ; 
	}

	fim[root] = 1 ;

}

bool cmp(pair<char,int> a, pair<char,int> b){return qtd[trie[a.second][a.first-'a']] < qtd[trie[b.second][b.first-'a']] ; }

void dfs(int v, int p){

	if(fim[v]){
		resp.push_back('P') ; ctt++ ; 
	}

	int mx = -1 ; char ind = 'a' ; 

	for(char i = 'a' ; i <= 'z' ; i++){
		if(trie[v][i-'a'] == 0 || trie[v][i-'a'] == p) continue ; 
		if(mx < qtd[trie[v][i-'a']]){
			mx = qtd[trie[v][i-'a']] ; ind = i ;  
		}
	}

	// cout << v << " " << mx << " " << ind << "\n" ; 

	for(char i = 'a' ; i <= 'z' ; i++){  
		if(trie[v][i-'a'] == 0 || trie[v][i-'a'] == p || ind == i) continue ; 
		resp.push_back(i) ;
		dfs(trie[v][i-'a'], v) ; 
	}

	if(mx != -1 && trie[v][ind-'a']){
		resp.push_back(ind) ; dfs(trie[v][ind-'a'], v) ; 
	}

	if(ctt != n)  resp.push_back('-')  ; 

}

void dfs_h(int v, int p){

	qtd[v] = 1 ; 

	if(fim[v]) return ; 

	for(char i = 'a' ; i <= 'z' ; i++){
		if(trie[v][i-'a'] == 0 || trie[v][i-'a'] == p) continue ; 
		dfs_h(trie[v][i-'a'], v) ; 
		qtd[v] = max(qtd[v], qtd[trie[v][i-'a']] + 1) ; 
	}

}

int main(){

	ios_base::sync_with_stdio(false) ; cin.tie(NULL) ; 

	cin >> n ; 

	for(int i = 1 ; i <= n ; i++){
		cin >> s ; 
		add(s) ; 
	}

	memset(qtd, -1, sizeof qtd) ; 

	dfs_h(0, 0) ; // achar a maior alt de cada um 

	dfs(0, 0) ;

	cout << resp.size() << "\n" ; 

	for(auto a : resp) cout << a << "\n" ; 

}
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2628 KB Output is correct
2 Correct 1 ms 2624 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2636 KB Output is correct
2 Correct 1 ms 2636 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 2636 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2636 KB Output is correct
2 Correct 2 ms 2636 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 2636 KB too many deletions
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 3404 KB too many deletions
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 11 ms 5572 KB too many deletions
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 22 ms 10308 KB too many deletions
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 47 ms 21992 KB too many deletions
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 44 ms 17720 KB too many deletions
2 Halted 0 ms 0 KB -