제출 #1365286

#제출 시각아이디문제언어결과실행 시간메모리
1365286abmr59Type Printer (IOI08_printer)C++20
100 / 100
100 ms105952 KiB
#include <bits/stdc++.h>

using namespace std;

#define int long long

const int maxn = 1000005;
struct node
{
    int maxdep,dep,sub;
    node *adj[26];
    node()
    {
        for(int i=0;i<26;i++)
        {
            adj[i] = 0;
        }
        maxdep=0;
        dep=0;
        sub=0;
    }
};
node *root = new node;
void insert(string s)
{
    node *cur = root; 
    for(auto i:s)
    {
        if(cur -> adj[i-'a'] == 0)
        {
            cur -> adj[i-'a'] = new node;
        }
        cur = cur -> adj[i-'a'];
    }
    cur -> sub++;
}

void dfs1(node *cur)
{
    cur -> maxdep = cur-> dep;
    for(int i=0;i<26;i++)
    {
        if(cur -> adj[i] != 0)
        {
            cur->adj[i]->dep = cur->dep +1;
            dfs1(cur -> adj[i]);
            cur -> maxdep = max(cur -> maxdep,cur -> adj[i] -> maxdep);
        }
    }
}
string ans;

void dfs2(node *cur)
{
    if(cur -> sub--)
    {
        ans +='P';
    }
    int m=-1;
    for(int i=0;i<26;i++)
    {
        if(cur -> adj[i])
        {
            if(m==-1 || cur -> adj[i] -> maxdep > cur -> adj[m] -> maxdep)
            {
                m=i;
            }
        }
    }

    for(int i=0;i<26;i++)
    {
        if(i!=m && cur -> adj[i])
        {
            ans += (char)(i+'a');
            dfs2(cur->adj[i]);
            ans+='-';
        }
    }
    if(m!= -1)
    {
        ans+=m+'a';
        dfs2(cur->adj[m]);
        ans+='-';   
    }

}

signed main()
{
    cin.tie(0);
    ios_base::sync_with_stdio(0);
    int n;
    cin >> n;

    string s;
    for(int i=0;i<n;i++)
    {
        cin >> s;
        insert(s);
    }
    dfs1(root);
    dfs2(root);

    while(ans.back() == '-')
    {
        ans.pop_back();
    }
    cout << ans.size() << '\n';
    for(auto i:ans)
    {
        cout << i << '\n';
    }
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…