Submission #1312180

#TimeUsernameProblemLanguageResultExecution timeMemory
1312180mudanvitType Printer (IOI08_printer)C++20
100 / 100
21 ms10908 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;
int sim(const string& a,const string& b){
    int k=0; 
    for (int j=0; j<min(a.size(), b.size()); j++){
        if (a[j]!=b[j]){break;}k++; 
    }
    return k;
}
int main() {
	int N; cin>>N;
    std::vector<std::string> inp(N);
    for (int i=0; i<N; i++){cin>>inp[i];}
    int maxLen = 0;
    string let = "";
    for (auto x: inp){if (x.size()>maxLen){maxLen=x.size(); let = x;}}
    sort(inp.begin(), inp.end(), [&](const string &a, const string &b) {
        int simA = sim(a, let);
        int simB = sim(b, let);
        if (simA != simB) return simA < simB;
        return a < b;
    });
    std::string ans = "";
    int ansn = 0;
    for (auto x: inp[0]){ans += x; ans+="\n"; ansn++;}
    ans += "P\n"; ansn++;
    for (int i=1; i<N; i++){
        int k=0;
        for (int j=0; j<min(inp[i].size(), inp[i-1].size()); j++){
            if (inp[i][j]!=inp[i-1][j]){break;}
            k+=1;
        }
        for (int j=0; j<inp[i-1].size()-k; j++){ans += "-\n"; ansn++;}
        for (int j=k; j<inp[i].size(); j++){
            ans += inp[i][j]; ansn++;ans+="\n";
        }
        ans+="P\n"; ansn++;
    }
    cout<<ansn<<endl;
    cout<<ans;
}
#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...