// 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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |