Submission #1324112

#TimeUsernameProblemLanguageResultExecution timeMemory
1324112sh_qaxxorov_571Type Printer (IOI08_printer)C++20
100 / 100
134 ms99092 KiB
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
struct Node {
    Node* child[26];
    bool isEndOfWord;
    int maxDepth;
    Node() {
        for (int i = 0; i < 26; i++) child[i] = nullptr;
        isEndOfWord = false;
        maxDepth = 0;
    }
};
void insert(Node* root, const string& s) {
    Node* curr = root;
    for (char c : s) {
        int idx = c - 'a';
        if (!curr->child[idx]) curr->child[idx] = new Node();
        curr = curr->child[idx];
    }
    curr->isEndOfWord = true;
}
int computeMaxDepth(Node* curr) {
    int m = 0;
    for (int i = 0; i < 26; i++) {
        if (curr->child[i]) {
            m = max(m, 1 + computeMaxDepth(curr->child[i]));
        }
    }
    return curr->maxDepth = m;
}
vector<char> operations;
void solve(Node* curr) {
    if (curr->isEndOfWord) {
        operations.push_back('P');
    }
    vector<pair<int, int>> children;
    for (int i = 0; i < 26; i++) {
        if (curr->child[i]) {
            children.push_back({curr->child[i]->maxDepth, i});
        }
    }
    sort(children.begin(), children.end());
    for (auto& p : children) {
        int idx = p.second;
        operations.push_back(idx + 'a');
        solve(curr->child[idx]);
        operations.push_back('-'); 
    }
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int N;
    cin >> N;
    Node* root = new Node();
    for (int i = 0; i < N; i++) {
        string s;
        cin >> s;
        insert(root, s);
    }
    computeMaxDepth(root);
    solve(root);
    while (!operations.empty() && operations.back() == '-') {
        operations.pop_back();
    }
    cout << operations.size() << "\n";
    for (char op : operations) {
        cout << op << "\n";
    }
    return 0;
}
#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...