Submission #759507

#TimeUsernameProblemLanguageResultExecution timeMemory
759507akashdknightType Printer (IOI08_printer)C++14
30 / 100
54 ms41072 KiB
//for the question https://oj.uz/problem/view/IOI08_printer 

#include <bits/stdc++.h>
using namespace std;

struct Trie
{
    map<char,Trie*> children;
    bool isWord;
    int count;

    void insertTrie(string s, int pos)
    {
        if(pos < s.size())
        {   
            if(children.find(s[pos]) == children.end())
            {    
                children[s[pos]] = new Trie;
                children[s[pos]]->isWord = false;
                children[s[pos]]->count = s.size() - pos;
            }
            int c = children[s[pos]]->count;
            c = c > s.size() - pos ? c : s.size() - pos;
            children[s[pos]]->count = c;
            children[s[pos]]->insertTrie(s, pos+1);
        }
        else 
        { 
            isWord = true;
            count = 0;
        }
    }
};

bool mysort(pair<char, Trie*> a, pair<char, Trie*> b)
{
    return a.second->count <= b.second->count;
}

void doit(Trie * root, vector<char>& ans)
{
    if(root->isWord == true)ans.push_back('P');
    vector<pair<char,Trie*>> arr;

    for(auto x : root->children)
    {
        arr.push_back({x.first, x.second});
    }
    sort(arr.begin(), arr.end(), mysort);

    for(auto x : arr)
    {
        ans.push_back(x.first);
        doit(x.second, ans);
        ans.push_back('-');
    }
    
}

int main()
{

    int t;
    cin >> t;
    Trie mytrie;
    mytrie.isWord = false;

    while(t--)
    {
        string s;
        cin >> s;
        mytrie.insertTrie(s, 0);
    }

    vector<char> ans;    
    
    doit(&mytrie, ans);

    int n = ans.size();
    int count = n;
    for(int i = n-1; i >= 0; i--)
    {
        if(ans[i] == '-')count--;
        else break;
    }

    cout << count << endl;

    for(int i = 0; i < count ; i++)cout << ans[i] << endl;

    return 0;
}

Compilation message (stderr)

printer.cpp: In member function 'void Trie::insertTrie(std::string, int)':
printer.cpp:14:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   14 |         if(pos < s.size())
      |            ~~~~^~~~~~~~~~
printer.cpp:23:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |             c = c > s.size() - pos ? c : s.size() - pos;
      |                 ~~^~~~~~~~~~~~~~~~
#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...