Submission #1063698

# Submission time Handle Problem Language Result Execution time Memory
1063698 2024-08-17T23:42:41 Z dyogorb Type Printer (IOI08_printer) C++14
60 / 100
52 ms 6748 KB
#include <bits/stdc++.h>

using namespace std;
const int WMAX = 3e4;

int trie[WMAX][26];
int node_count;
bool stop[WMAX];

string biggest;
string ans;

void insert(string word){
    int node = 0;

    for (int i = 0; i < word.size(); i++)
    {
        char c = word[i];
        if(trie[node][c - 'a'] == 0) trie[node][c - 'a'] = ++node_count;
        
        node = trie[node][c - 'a'];
    }
    
    stop[node] = true;
}

void dfs(int node, int depth, int flag){    
    if(stop[node]) ans += 'P';
    for (int i = 0; i < 26; i++)
    {
        if((i != biggest[depth] - 'a' || !flag) && trie[node][i]){
            char c = 'a' + i;
            ans += c; 
            dfs(trie[node][i], depth + 1, 0);
            ans += '-';    
        }
    }    
        
    if(depth < biggest.size() && trie[node][biggest[depth] - 'a'] && flag){        
        ans += biggest[depth];        
        dfs(trie[node][biggest[depth] - 'a'], depth + 1, 1);                
    }
    
}

int main(){
    int n;
    cin >> n;
    string s;
    biggest = "";

    for (int i = 0; i < n; i++)
    {
        cin >> s;     
        insert(s);   
        if(s.size() > biggest.size()) biggest = s;
    }
    
    dfs(0, 0, 1);
    cout << ans.size() << endl;
    for (auto c : ans)
    {
        cout << c << endl;
    }
    
}

Compilation message

printer.cpp: In function 'void insert(std::string)':
printer.cpp:16:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |     for (int i = 0; i < word.size(); i++)
      |                     ~~^~~~~~~~~~~~~
printer.cpp: In function 'void dfs(int, int, int)':
printer.cpp:39:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   39 |     if(depth < biggest.size() && trie[node][biggest[depth] - 'a'] && flag){
      |        ~~~~~~^~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 8 ms 604 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 18 ms 1172 KB Output is correct
2 Correct 19 ms 1372 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 52 ms 3156 KB Output is correct
2 Runtime error 5 ms 6744 KB Execution killed with signal 11
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 5 ms 6588 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 5 ms 6744 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 5 ms 6748 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -