Submission #880498

#TimeUsernameProblemLanguageResultExecution timeMemory
880498StefanL2005Type Printer (IOI08_printer)C++14
100 / 100
143 ms119364 KiB
#include <bits/stdc++.h>
using namespace std;
#define CH (*p - 'a')

int nr = 0;

struct Trie {
    int down, word;
    Trie *path;
    vector<Trie*> fii;

    Trie() {
        down = word = 0; path = 0;

        fii = vector<Trie*> (26, 0);
    }
};

Trie *Root = new Trie;

void insert(Trie *Nod, char *p)
{
    if (*p == '\0')
    {
        Nod->word++;
        return;
    }

    if (Nod->fii[CH] == NULL)
    {
        Nod->fii[CH] = new Trie;
        nr++;
    }
    insert(Nod->fii[CH], p + 1);

    if (Nod->fii[CH]->down + 1 > Nod->down)
    {
        Nod->down = Nod->fii[CH]->down + 1;
        Nod->path = Nod->fii[CH];
    }
}

void easy_search(Trie *Nod)
{
    while (Nod->word > 0)
    {
        cout<< "P\n";
        Nod->word--;
    }

    for (int i = 0; i < 26; i++)
        if (Nod->fii[i] != NULL)
        {
            cout<< (char) (i + 'a') << "\n";
            easy_search(Nod->fii[i]);
            cout<< "-\n";
        }
}

int show_longest(Trie *Nod, int k)
{
    if (Nod->path == NULL)
        return k;
    return show_longest(Nod->path, k + 1);
}

void complex_search(Trie *Nod)
{
    while (Nod->word > 0)
    {
        cout<< "P\n";
        Nod->word--;
    }

    if (Nod->path == NULL)
        return;
    
    char let;
    for (int i = 0; i < 26; i++)
    {
        if (Nod->fii[i] == NULL)
            continue;

        if (Nod->fii[i] == Nod->path)
        {
            let = (char) (i + 'a');
            continue;
        }

        cout<< (char) (i + 'a') << "\n";
        easy_search(Nod->fii[i]);
        cout<< "-\n";
    }

    cout<< let << "\n";
    complex_search(Nod->path);
}
int main()
{
    int N;
    cin>> N;
    
    for (int i = 0; i < N; i++)
    {
        string w; cin>> w;
        insert(Root, &w[0]);
    }

    cout<< (nr - Root->down) * 2 + Root->down + N << "\n";
    
    complex_search(Root);
    return 0;
}

Compilation message (stderr)

printer.cpp: In function 'void complex_search(Trie*)':
printer.cpp:78:10: warning: 'let' may be used uninitialized in this function [-Wmaybe-uninitialized]
   78 |     char let;
      |          ^~~
#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...