Submission #635373

#TimeUsernameProblemLanguageResultExecution timeMemory
635373NeroZeinType Printer (IOI08_printer)C++17
100 / 100
251 ms101260 KiB
#include <bits/stdc++.h>
#define FOR(i,a,b) for (int i=a; i<=(b); i++)
 
using namespace std;
int n;
long long ans;
string mx;
 
struct node{
    node* ch[26];
    int cnt; 
    node(){
        for(int i=0;i<26;i++)
            ch[i] = NULL;
        cnt = 0;
    }
};
 
node* root = new node();
void add(string s){
    node* cur = root; 
    for(int i=0;i<s.size();i++){
        int id = s[i]-'a';
        if (cur->ch[id] == NULL)
            cur->ch[id] = new node(),ans+=2;
        cur = cur->ch[id];
        cur->cnt++;
    }
}
set<string>se; 
void dfs(node* go,int lv=-1,bool keep = 1, string s=""){
    int left = -1;
    if (se.count(s))
        cout<<('P')<<'\n';
    for(int i=0;i<26;i++){
        if(go->ch[i] == NULL)continue;
        if(mx[lv+1]==(i+'a')&&keep){left=i;continue;}
        cout<<(char(i+'a'))<<'\n';
        dfs(go->ch[i],lv+1,0,s+(char(i+'a')));
        cout<<('-')<<'\n';
    }
    if (left!=-1){
        cout<<(char('a'+left))<<'\n';
        dfs(go->ch[left],lv+1,1,s+(char(left+'a')));
    }
}

signed main(){
 
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
 
    cin>>n;
    FOR(i,1,n){
        string s; 
        cin>>s; 
        se.insert(s); 
        add(s);
        if((int)mx.size() < (int)s.size())
            mx = s; 
    }
    cout<<ans-(int)mx.size()+n<<'\n';
    dfs(root);
}

Compilation message (stderr)

printer.cpp: In function 'void add(std::string)':
printer.cpp:22:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   22 |     for(int i=0;i<s.size();i++){
      |                 ~^~~~~~~~~
#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...