답안 #1105833

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1105833 2024-10-28T03:33:09 Z vjudge1 Type Printer (IOI08_printer) C++11
100 / 100
103 ms 96020 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;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 2 ms 2640 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4 ms 2640 KB Output is correct
2 Correct 3 ms 2808 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 6992 KB Output is correct
2 Correct 13 ms 13392 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 15564 KB Output is correct
2 Correct 8 ms 4920 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 38 ms 36612 KB Output is correct
2 Correct 89 ms 81340 KB Output is correct
3 Correct 45 ms 43200 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 31 ms 28104 KB Output is correct
2 Correct 103 ms 96020 KB Output is correct
3 Correct 51 ms 47576 KB Output is correct
4 Correct 86 ms 91840 KB Output is correct