Submission #1177341

#TimeUsernameProblemLanguageResultExecution timeMemory
1177341rubyscarletType Printer (IOI08_printer)C++20
100 / 100
130 ms60016 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define el "\n"
#define crispy                    \
ios_base::sync_with_stdio(0); \
cin.tie(0);                   \
cout.tie(0);

int n;
int nn = 0;
struct Node
{
    bool end = 0;
    int count = 0;
    int arr[26]{};
    int rem = -1;
};
queue<char>ans;
vector<Node> trie(1);
void buildTrie(string &s)
{
    int cur = 0;
    for (int i = 0; i < s.size(); i++)
    {
        int temp = s[i] - 'a';
        if (!trie[cur].arr[temp])
        {
            trie[cur].arr[temp] = trie.size();
            trie.emplace_back();
        }
        cur = trie[cur].arr[temp];
        trie[cur].count++;
        trie[cur].rem = max(trie[cur].rem,int(s.size() - i));
    }
    trie[cur].end = 1;
}

void trieTraversal(int cur = 0){
    if(trie[cur].end) nn--,ans.emplace('P');
    vector<pair<int,pair<int,int>>>idRem;
    for(int i = 0; i < 26; i++){
        if(~trie[trie[cur].arr[i]].rem){
            idRem.push_back({trie[trie[cur].arr[i]].rem,{i,trie[cur].arr[i]}});
        }
    }
    sort(idRem.begin(),idRem.end());
    for(auto it : idRem){
        ans.emplace(char(it.second.first +'a'));
        trieTraversal(it.second.second);
        if(nn)
        ans.emplace('-');
    }
    
}
void scarlet()
{
    cin>>n;
    nn=n;
    for(int i = 0 ; i < n;i++){
        string s;
        cin>>s;
        buildTrie(s);
    }
    trieTraversal();
    cout<<ans.size()<<el;
    while(!ans.empty()){
        cout<<ans.front()<<el;
        ans.pop();
    }
}
int main()
{
    // crispy ;
    int t = 1;
    // cin >> t;
    while (t--)
    {
        scarlet();
    }
}
#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...