#include <bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define debug(n) cout << "DEBUG1 " << n << "\n";
#define debug2(n, m) cout << "DEBUG2 " << n << ' ' << m << "\n";
#define debug3(n, m, x) cout << "DEBUG3 " << n << ' ' << m << ' ' << x << "\n";
#define debug4(n, m, x, y) cout << "DEBUG3 " << n << ' ' << m << ' ' << x << ' ' << y << "\n";
#define ss_def stringstream ss // stringstream, do ss_def(str), then ss >> n (n is int)
#define upzero(n) rrn < 0) n = 0
#define alive(n) cout << "Alive here: checkpoint " << n << endl
#pragma GCC optimize("Ofast")
using namespace std;
void yes() {
cout << "YES\n";
return;
}
void no() {
cout << "NO\n";
return;
}
bool cmp1(string a, string b) {
if (a.length() != b.length()) return a.length() < b.length();
for (int i = 0;i < min(a.length(), b.length());i++) {
if (a[i] != b[i]) return a[i] < b[i];
}
return false;
}
string last;
bool cmp2(string a, string b) {
int cnt1 = a.length(), cnt2 = b.length();
for (int i = 0;i < a.length();i++) {
if (a[i] != last[i]) {
cnt1 = i;
break;
}
}
for (int i = 0;i < b.length();i++) {
if (b[i] != last[i]) {
cnt2 = i;
break;
}
}
if (cnt1 != cnt2) return cnt1 < cnt2;
return a < b;
}
vector<char> ans;
vector<string> v;
void solve(int case_no) {
// implementation
int n;
cin >> n;
for (int i = 0;i < n;i++) {
string str;
cin >> str;
v.push_back(str);
}
sort(v.begin(), v.end(), cmp1);
last = v[v.size() - 1];
sort(v.begin(), v.end() - 1, cmp2);
string str = "";
int strl = 0;
for (int i = 0;i < n;i++) {
int vl = v[i].length();
while (str != v[i].substr(0, min(vl, strl)) && strl != 0) {
ans.push_back('-');
str.erase(strl - 1, 1);
strl--;
}
for (int j = strl;j < vl;j++) {
ans.push_back(v[i][j]);
str += v[i][j];
strl++;
}
ans.push_back('P');
}
cout << ans.size() << endl;
for (char c : ans) cout << c << endl;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
srand(time(NULL));
int t = 1;
// cin >> t;
for (int i = 1;i <= t;i++) solve(i);
}
/*
*/
Compilation message
printer.cpp: In function 'bool cmp1(std::string, std::string)':
printer.cpp:23:19: warning: comparison of integer expressions of different signedness: 'int' and 'const long unsigned int' [-Wsign-compare]
23 | for (int i = 0;i < min(a.length(), b.length());i++) {
| ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printer.cpp: In function 'bool cmp2(std::string, std::string)':
printer.cpp:31:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
31 | for (int i = 0;i < a.length();i++) {
| ~~^~~~~~~~~~~~
printer.cpp:37:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
37 | for (int i = 0;i < b.length();i++) {
| ~~^~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
208 KB |
Output is correct |
2 |
Correct |
1 ms |
312 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
1 ms |
204 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
1 ms |
308 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
204 KB |
Output is correct |
2 |
Correct |
1 ms |
204 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
204 KB |
Output is correct |
2 |
Correct |
10 ms |
332 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
21 ms |
416 KB |
Output is correct |
2 |
Correct |
21 ms |
460 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
68 ms |
676 KB |
Output is correct |
2 |
Correct |
150 ms |
1060 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
158 ms |
1360 KB |
Output is correct |
2 |
Correct |
60 ms |
1136 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
479 ms |
2744 KB |
Output is correct |
2 |
Correct |
984 ms |
4452 KB |
Output is correct |
3 |
Correct |
530 ms |
3788 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
351 ms |
2604 KB |
Output is correct |
2 |
Execution timed out |
1078 ms |
5256 KB |
Time limit exceeded |
3 |
Halted |
0 ms |
0 KB |
- |