#include <bits/stdc++.h>
using namespace std;
struct yas{
string s;
};
bool operator<(yas &a,yas &b){
if(a.s.size() == b.s.size())return a.s < b.s;
return a.s.size() < b.s.size();
};
int n;
const int sz=5e5 + 1;
int trie[sz][26];
int bitis[sz];
vector<int> gt[sz];
vector<char> cvb;
int last=0;
void qur(string s){
int curr=0;
for(auto &i : s){
if(trie[curr][i-'a'])curr = trie[curr][i - 'a'];
else{
gt[curr].push_back(i - 'a');
curr = trie[curr][i - 'a'] = ++last;
}
}
bitis[curr]++;
}
void dfs(int node){
if(bitis[node]){
for(int i=0;i<bitis[node];++i)cvb.push_back('P');
}
for(auto &i : gt[node]){
cvb.push_back(i + 'a');
dfs(trie[node][i]);
}
cvb.push_back('-');
}
int main(){
cin >> n;
vector<yas> sira(n);
for(auto &i : sira){
cin >> i.s;
}
sort(sira.begin(),sira.end());
// reverse(sira.begin(),sira.end());
for(auto &i : sira)qur(i.s);
dfs(0);
while(cvb[cvb.size() - 1] == '-')cvb.pop_back();
cout << cvb.size() << '\n';
for(auto &i : cvb)cout << i << '\n';
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
12120 KB |
Output is correct |
2 |
Correct |
7 ms |
12124 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
12120 KB |
Output is correct |
2 |
Incorrect |
5 ms |
12212 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
5 ms |
12120 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
5 ms |
12040 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
4 ms |
12124 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
6 ms |
13148 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
13 ms |
15708 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
19 ms |
21464 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
46 ms |
35532 KB |
Output is correct |
2 |
Correct |
81 ms |
66308 KB |
Output is correct |
3 |
Incorrect |
50 ms |
40660 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
42 ms |
30416 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |