답안 #648889

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
648889 2022-10-08T16:40:37 Z Spade1 Type Printer (IOI08_printer) C++14
100 / 100
51 ms 6824 KB
#include<bits/stdc++.h>
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define ld long double
#define st first
#define nd second
#define pb push_back
#define INF INT_MAX
using namespace std;

const int N = 3e5 + 10;

vector<string> v, v2;
vector<char> ans;
int pre[N];

void solve() {
    int n; cin >> n;
    for (int i = 0; i < n; ++i) {
        string s; cin >> s;
        v.pb(s);
    }

    sort(v.begin(), v.end());

    int l = 0, mx = 0;
    for (int i = 0; i < n; ++i)
        if (v[i].size() > mx)
            l = i, mx = v[i].size();

    for (int i = 0; i < n; ++i)
        for (int j = 0; j < v[i].size(); ++j)
            if (v[i][j] == v[l][j]) pre[i]++;
            else break;

    for (int j = 0; j <= 20; ++j) {
        for (int i = 0; i < n; ++i) {
            if (pre[i] == j) v2.pb(v[i]);
        }
    }
    for (int i = 1; i < n; ++i) {
        pre[i] = 0;
        for (int j = 0; j < min(v2[i].size(), v2[i-1].size()); ++j) {
            if (v2[i][j] == v2[i-1][j]) pre[i]++;
            else break;
        }
    }
    for (auto i : v2[0]) ans.pb(i);
    ans.pb('P');
    for (int i = 1; i < n; ++i) {
        for (int j = pre[i]; j < v2[i-1].size(); ++j) ans.pb('-');
        for (int j = pre[i]; j < v2[i].size(); ++j) ans.pb(v2[i][j]);
        ans.pb('P');
    }
    cout << ans.size() << '\n';
    for (auto i : ans) cout << i << '\n';
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(NULL);
    int t = 1;
//    cin >> t;
    while (t--) {
        solve();
    }
}

Compilation message

printer.cpp: In function 'void solve()':
printer.cpp:29:25: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   29 |         if (v[i].size() > mx)
      |             ~~~~~~~~~~~~^~~~
printer.cpp:33:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |         for (int j = 0; j < v[i].size(); ++j)
      |                         ~~^~~~~~~~~~~~~
printer.cpp:44:27: warning: comparison of integer expressions of different signedness: 'int' and 'const long unsigned int' [-Wsign-compare]
   44 |         for (int j = 0; j < min(v2[i].size(), v2[i-1].size()); ++j) {
      |                         ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
printer.cpp:52:32: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   52 |         for (int j = pre[i]; j < v2[i-1].size(); ++j) ans.pb('-');
      |                              ~~^~~~~~~~~~~~~~~~
printer.cpp:53:32: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |         for (int j = pre[i]; j < v2[i].size(); ++j) ans.pb(v2[i][j]);
      |                              ~~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 468 KB Output is correct
2 Correct 2 ms 468 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 724 KB Output is correct
2 Correct 9 ms 1308 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 1588 KB Output is correct
2 Correct 8 ms 1652 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 26 ms 3312 KB Output is correct
2 Correct 43 ms 5836 KB Output is correct
3 Correct 32 ms 5264 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 22 ms 3252 KB Output is correct
2 Correct 51 ms 6824 KB Output is correct
3 Correct 34 ms 5828 KB Output is correct
4 Correct 47 ms 6672 KB Output is correct