Submission #1105751

# Submission time Handle Problem Language Result Execution time Memory
1105751 2024-10-27T16:00:54 Z Faggi Type Printer (IOI08_printer) C++11
100 / 100
104 ms 97724 KB
#include <bits/stdc++.h>

using namespace std;

struct Nodo
{
    int fin;
    int ma;
    int hijo[26];
    int tams[26];
    void iniciar()
    {
        ma=0;
        fin=0;
        for(int i=0; i<26; i++)
        {
            hijo[i]=-1;
            tams[i]=0;
        }
    }
};

const int largo = 5e5+1;
Nodo trie[largo];

int raiz = 0, tam = 1;
void Agregar(string s)
{
    int ta=s.size();
    int nod = raiz;
    for(auto c : s)
    {
        int x = c-'a';
        if(trie[nod].hijo[x]==-1)
        {
            trie[tam].iniciar();
            trie[nod].hijo[x]=tam;
            tam++;
        }
        trie[nod].tams[x]=max(trie[nod].tams[x],ta);
        trie[nod].ma=max(trie[nod].ma,trie[nod].tams[x]);
        nod = trie[nod].hijo[x];
        ta--;
    }
    trie[nod].fin=1;
}
vector<char>ans;
void start(int nod)
{
    if(trie[nod].fin)
        ans.push_back('P');
    int i;
    vector<pair<int,int>>v;
    for(i=0; i<26; i++)
    {
        if(trie[nod].hijo[i]!=-1)
        {
            v.push_back({trie[nod].tams[i],i});
        }
    }
    sort(v.begin(),v.end());
    for(i=0; i<int(v.size()); i++)
    {
        ans.push_back('a'+v[i].second);
        start(trie[nod].hijo[v[i].second]);
    }
    ans.push_back('-');
}
int main()
{
    trie[0].iniciar();
    int n, i;
    cin >> n;
    string s;
    for(i=0; i<n; i++)
    {
        cin >> s;
        Agregar(s);
    }
    start(raiz);
    while(ans.size()&&ans[int(ans.size())-1]=='-')
        ans.pop_back();
    cout << int(ans.size()) << '\n';
    for(auto k:ans)
    {
        cout << k << '\n';
    }
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 2 ms 2640 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 2640 KB Output is correct
2 Correct 3 ms 2640 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 7 ms 6736 KB Output is correct
2 Correct 12 ms 13292 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 19 ms 15308 KB Output is correct
2 Correct 8 ms 4688 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 37 ms 36436 KB Output is correct
2 Correct 74 ms 80828 KB Output is correct
3 Correct 43 ms 42944 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 30 ms 28104 KB Output is correct
2 Correct 104 ms 97724 KB Output is correct
3 Correct 53 ms 47040 KB Output is correct
4 Correct 87 ms 91452 KB Output is correct