#include <bits/stdc++.h>
using namespace std;
struct Trie{
struct Trie *child[26];
char letra;
bool endOfWord,longest;
};
struct Trie *createNode(char letra){
struct Trie *nodo = new Trie;
for(int i=0; i<26; i++){
nodo->child[i] = NULL;
}
nodo->endOfWord = false;
nodo->longest = false;
nodo->letra = letra;
return nodo;
}
void insert(struct Trie *root, string key, bool masLarga){
struct Trie *curr = root;
for(int i=0; i<(int)key.size(); i++){
int index = key[i] - 'a';
if(!curr->child[index]){
curr->child[index] = createNode(key[i]);
}
if(masLarga){
struct Trie *sig = curr->child[index];
sig->longest = true;
}
curr = curr->child[index];
}
if(masLarga){
curr->longest = true;
}
curr->endOfWord = true;
}
bool isEmpty(struct Trie *root){
struct Trie *curr = root;
for(int i=0; i<26; i++){
if(curr->child[i]){
return false;
}
}
return true;
}
int counting(struct Trie *root){
struct Trie *curr = root;
int cont = 2;
if(curr->longest){
cont--;
}
for(int i=0; i<26; i++){
if(curr->child[i]){
struct Trie *sig = curr->child[i];
cont += counting(sig);
}
}
return cont;
}
void printing(struct Trie *root){
struct Trie *curr = root;
//cout << curr->letra << endl;
struct Trie *seguimos = NULL;
for(int i=0; i<26; i++){
if(curr->child[i]){
struct Trie *sig = curr->child[i];
if(sig->longest){
seguimos = sig;
continue;
}
cout << sig->letra << endl;
printing(sig);
}
}
if(seguimos){
cout << seguimos->letra << endl;
printing(seguimos);
return;
}
if(curr->endOfWord){
cout << "P\n";
}
if(!curr->longest) cout << "-\n";
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
struct Trie *root = createNode('0');
vector<string> v(n);
pair<int,int> longest;
longest.first = 1;
longest.second = 0;
for(int i=0; i<n; i++){
string s;
cin >> s;
v[i] = s;
if((int)s.size() > longest.first){
longest.first = s.size();
longest.second = i;
}
}
for(int i=0; i<n; i++){
if(i == longest.second){
insert(root,v[i],true);
}else insert(root,v[i],false);
}
cout << counting(root)+n-2 << endl;
printing(root);
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
0 ms |
340 KB |
Line "" doesn't correspond to pattern "[a-z\-P]{1}" |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Incorrect |
0 ms |
212 KB |
Line "" doesn't correspond to pattern "[a-z\-P]{1}" |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
1 ms |
340 KB |
Line "" doesn't correspond to pattern "[a-z\-P]{1}" |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
11 ms |
1816 KB |
Line "" doesn't correspond to pattern "[a-z\-P]{1}" |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
44 ms |
5896 KB |
Line "" doesn't correspond to pattern "[a-z\-P]{1}" |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
108 ms |
14780 KB |
Line "" doesn't correspond to pattern "[a-z\-P]{1}" |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
238 ms |
36800 KB |
Line "" doesn't correspond to pattern "[a-z\-P]{1}" |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
197 ms |
28884 KB |
Line "" doesn't correspond to pattern "[a-z\-P]{1}" |
2 |
Halted |
0 ms |
0 KB |
- |