답안 #647444

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
647444 2022-10-02T15:22:52 Z phoenix Type Printer (IOI08_printer) C++17
100 / 100
172 ms 99528 KB
#include<bits/stdc++.h>

using namespace std;

struct node {
    node* to[ 26 ];
    bool terminal = false;
    int h = 0;
};
void add_string(node* v, string &s) {
    for(int i = 0;i < (int)s.size();i++) {
        if(!v->to[s[ i ] - 'a']) 
            v->to[s[ i ] - 'a'] = new node();
        v = v->to[s[ i ] - 'a'];
        v->h = max(v->h, (int)s.size() - 1 - i);
    }
    v->terminal = true;
}
vector<char> op;
void dfs(node* v) {
    if(v->terminal) op.push_back('P');

    vector<int> x;
    for(int i = 0;i < 26;i++) if(v->to[ i ]) x.push_back(i);
    sort(x.begin(), x.end(), [&](int a, int b){return v->to[ a ]->h < v->to[ b ]->h;});
    
    for(int i : x) {
        op.push_back(i + 'a');
        dfs(v->to[ i ]);
        op.push_back('-');
    }
}

node trie;
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);

    int n;
    cin >> n;
    for(int i = 0;i < n;i++) {
        string s;
        cin >> s;
        add_string(&trie, s);
    }
    dfs(&trie);

    while(!op.empty() && op.back() == '-') op.pop_back();
    cout << (int)op.size() << '\n';
    for(char c : op)
        cout << c << '\n';
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 324 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 320 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 448 KB Output is correct
2 Correct 2 ms 1092 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1748 KB Output is correct
2 Correct 4 ms 2260 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 6000 KB Output is correct
2 Correct 21 ms 12576 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 26 ms 14772 KB Output is correct
2 Correct 9 ms 3400 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 60 ms 36612 KB Output is correct
2 Correct 132 ms 83760 KB Output is correct
3 Correct 80 ms 43140 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 51 ms 28700 KB Output is correct
2 Correct 172 ms 99528 KB Output is correct
3 Correct 88 ms 49016 KB Output is correct
4 Correct 142 ms 93984 KB Output is correct