Submission #492753

# Submission time Handle Problem Language Result Execution time Memory
492753 2021-12-08T19:15:38 Z erik_kl1 Type Printer (IOI08_printer) C++11
100 / 100
120 ms 102168 KB
#include <bits/stdc++.h>
#define F0R(i, n) for(int i = 0; i < (n); i++)
using namespace std;

ostringstream os;

struct node {
    int term_cnt;
    bool marked;
    node *nex[26];

    node() {
        term_cnt = 0;
        marked = 0;
        F0R(i,26)
            nex[i] = NULL;
    }
};

struct trie {
    node rt;

    void insert(string s) {
        node *cur = &rt;
        F0R(i,s.size()) {
            if(cur->nex[s[i]-'a'] == NULL)
                cur->nex[s[i]-'a'] = new node();
            cur = cur->nex[s[i]-'a'];
        }
        cur->term_cnt++;
    }

    void mark(string s) {
        node *cur = &rt;
        F0R(i,s.size()) {
            cur = cur->nex[s[i]-'a'];
            cur->marked = 1;
        }
    }
}
t;

int dfs(node *v) {
    int ret = v->term_cnt;
    F0R(i,ret)
        os << "P\n";
    F0R(i,26) if(v->nex[i] != NULL && !v->nex[i]->marked) {
        os << ((char) (i+'a')) << '\n';
        ret += dfs(v->nex[i]);
        os << "-\n";
        ret += 2;
    }
    F0R(i,26) if(v->nex[i] != NULL && v->nex[i]->marked) {
        os << ((char) (i+'a')) << '\n';
        ret += dfs(v->nex[i]);
        ret++;
    }
    return ret;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int N; cin >> N;
    string longest = "";
    F0R(i,N) {
        string s; cin >> s;
        t.insert(s);
        if(s.size() > longest.size())
            longest = s;
    }
    t.mark(longest);
    cout << dfs(&t.rt) << '\n';
    cout << os.str();
    return 0;
}

Compilation message

printer.cpp: In member function 'void trie::insert(std::string)':
printer.cpp:2:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    2 | #define F0R(i, n) for(int i = 0; i < (n); i++)
      |                                    ^
printer.cpp:25:9: note: in expansion of macro 'F0R'
   25 |         F0R(i,s.size()) {
      |         ^~~
printer.cpp: In member function 'void trie::mark(std::string)':
printer.cpp:2:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    2 | #define F0R(i, n) for(int i = 0; i < (n); i++)
      |                                    ^
printer.cpp:35:9: note: in expansion of macro 'F0R'
   35 |         F0R(i,s.size()) {
      |         ^~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 332 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 332 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 332 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 332 KB Output is correct
2 Correct 1 ms 1100 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 1868 KB Output is correct
2 Correct 3 ms 2252 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 7 ms 6092 KB Output is correct
2 Correct 15 ms 12872 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 26 ms 15144 KB Output is correct
2 Correct 7 ms 3404 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 52 ms 37672 KB Output is correct
2 Correct 120 ms 85904 KB Output is correct
3 Correct 56 ms 44344 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 37 ms 29404 KB Output is correct
2 Correct 120 ms 102168 KB Output is correct
3 Correct 61 ms 50352 KB Output is correct
4 Correct 102 ms 96488 KB Output is correct