Submission #1329064

#TimeUsernameProblemLanguageResultExecution timeMemory
1329064fahmid_rngType Printer (IOI08_printer)C++20
100 / 100
25 ms8220 KiB
#include<bits/stdc++.h>
using namespace std;

using ll=long long;
using ull=unsigned long long;

#define rep(i,a,b) for(int i=(a); i<(b); ++i)
#define all(array) array.begin(), array.end()
#define bitcnt(x) ((sizeof(x) <= sizeof(int)) ? (32 - __builtin_clz(x)) : (64 - __builtin_clzll(x)))

#define OJ
#ifndef OJ
#define debug(x) cerr<<"line "<<__LINE__<<": "<<#x<<" "; _print(x); cerr<<'\n';
#else
#define debug(x)
#endif

template<class T> void _print(T b);
template<class T, class V> void _print(pair<T, V> &p);
template<class T> void _print(vector<T> &b);
template<class T> void _print(set<T> &s);
template<class T, class V> void _print(map<T, V> &mp);
template<class T> void _print(deque<T> &d);
template<class T> void _print(stack<T> st);
template<class T> void _print(queue<T> q);
template<class T> void _print(priority_queue<T> pq);

template<class T> void _print(T b){cerr<<b;}
template<class T, class V> void _print(pair<T, V> &p){cerr<<"{"; _print(p.first); cerr<<", "; _print(p.second); cerr<<"}";}
template<class T> void _print(vector<T> &b){cerr<<"[ "; for(auto c:b){_print(c);cerr<<" ";} cerr<<"]";}
template<class T> void _print(set<T> &s){cerr<<"[ "; for(auto c:s){_print(c);cerr<<" ";} cerr<<"]";}
template<class T, class V> void _print(map<T, V> &mp){cerr<<"[ ";for(auto c:mp){_print(c); cerr<<" ";} cerr<<"]";}
template<class T> void _print(deque<T> &d){cerr<<"[ "; for(auto c:d){_print(c); cerr<<" ";} cerr<<"]";}
template<class T> void _print(stack<T> st){cerr<<"| "; while(!st.empty()){auto c=st.top(); st.pop(); _print(c); cerr<<" ";} cerr<<"|";}
template<class T> void _print(queue<T> q){cerr<<"( "; while(!q.empty()){auto c=q.front(); q.pop(); _print(c); cerr<<" ";} cerr<<")";}
template<class T> void _print(priority_queue<T> pq){cerr<<"< ";while(!pq.empty()){auto c=pq.top(); pq.pop(); _print(c); cerr<<" ";} cerr<<">";}
//===============================================================MAIN CODE=============================================================================================
void print(string a, string b, vector<char> &ans){
    int l=min(a.length(),b.length());
    for(int i=0; i<min(int(a.length()), int(b.length()));++i){
        if(a[i]!=b[i]){l=i; break;}
    }
    for(int i=l;i<int(a.length());++i) ans.push_back('-');
    for(int i=l;i<int(b.length());++i) ans.push_back(b[i]);
    ans.push_back('P');
}
inline void solve(){
    int n,mx=0; cin>>n;
    string w;
    vector<char> ans;
    vector<string> b(n),a;
    rep(i,0,n) {
        cin>>b[i];
        if(b[i].length()>mx){
            mx=b[i].length();
            w=b[i];
        }
    }
    vector<string> path(w.length());
    vector<vector<string>> level(w.length());
    rep(i,0,n){
        int l=-1;
        rep(j,0,b[i].length()){
            if(b[i][j]!=w[j]){l=j; break;}
        }
        if(l==-1){path[b[i].length()-1]=b[i]; continue;}
        level[l].push_back(b[i]);
    }
    for(int i=0;i<w.length();++i){
        sort(all(level[i]));
        if(!path[i].empty()) level[i].push_back(path[i]);
        for(auto c:level[i]) a.push_back(c);
    }
    
    for(auto c:a[0]) ans.push_back(c);
    ans.push_back('P');
    for(int i=1;i<n;++i){
        print(a[i-1],a[i],ans);
    }
    cout<<ans.size()<<'\n';
    for(auto c:ans) cout<<c<<'\n';
}
int main(){
    ios::sync_with_stdio(false); cin.tie(nullptr);
    int t=1; //cin>>t;
    for(int i=0;i<t;++i){
        //cout<<"Case "<<i+1<<": "<<'\n';
        solve();
    }
}
#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...