#include <bits/stdc++.h>
using namespace std;
struct Trie{
//struct Trie *child[26];
unordered_map<char,Trie*> child;
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->child.reserve(32);
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] == NULL){
curr->child[index] = createNode(key[i]);
}
*/
if(curr->child.find(key[i]) == curr->child.end()){
curr->child[key[i]] = createNode(key[i]);
}
//curr = curr->child[index];
curr = curr->child[key[i]];
if(masLarga) curr->longest = true;
}
curr->endOfWord = 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] != NULL){
struct Trie *sig = curr->child[i];
cont += counting(sig);
}
}
*/
for(auto it = curr->child.begin(); it != curr->child.end(); it++){
struct Trie *sig = it->second;
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] != NULL){
//cout << sizeof(*(curr->child[i])) << " " << sizeof(Trie) << endl;
//if(sizeof(*(curr->child[i])) == sizeof(Trie)){
struct Trie *sig = curr->child[i];
if(sig->longest){
seguimos = sig;
}else{
cout << sig->letra << endl;
printing(sig);
}
}
}
*/
for(auto it = curr->child.begin(); it != curr->child.end(); it++){
struct Trie *sig = it->second;
if(sig->longest){
seguimos = sig;
}else{
cout << sig->letra << endl;
printing(sig);
}
}
if(curr->endOfWord){
cout << 'P' << endl;
}
if(seguimos != NULL){
//cout << sizeof(*seguimos) << " " << sizeof(Trie) << endl;
//if(sizeof(*seguimos) == sizeof(Trie)){
cout << seguimos->letra << endl;
printing(seguimos);
return;
}
if(!curr->longest) cout << '-' << endl;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
struct Trie *root = createNode('0');
root->longest = true;
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 << sizeof(Trie) << endl;
//cout << sizeof(*root) << endl;
cout << counting(root)+n-1 << endl;
printing(root);
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
316 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
1 ms |
340 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
1 ms |
316 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
340 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
468 KB |
Output is correct |
2 |
Correct |
12 ms |
1732 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
23 ms |
3092 KB |
Output is correct |
2 |
Correct |
23 ms |
3848 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
76 ms |
10616 KB |
Output is correct |
2 |
Correct |
147 ms |
22668 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
178 ms |
26636 KB |
Output is correct |
2 |
Correct |
57 ms |
6216 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
465 ms |
67012 KB |
Output is correct |
2 |
Correct |
972 ms |
153832 KB |
Output is correct |
3 |
Correct |
498 ms |
79728 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
353 ms |
52440 KB |
Output is correct |
2 |
Execution timed out |
1085 ms |
182736 KB |
Time limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |