답안 #139035

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
139035 2019-07-31T08:22:54 Z mlyean00 Zalmoxis (BOI18_zalmoxis) C++14
95 / 100
1000 ms 33996 KB
#ifdef DEBUG
#include "debug.hpp"
#else
#pragma GCC optimize("Ofast")
#define trace(...)
#include <bits/stdc++.h>
#define endl '\n'
#endif

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int n, k;
    cin >> n >> k;

    list<int> a;
    int rem = 1 << 30;
    for (int i = 0; i < n; ++i) {
        int tmp;
        cin >> tmp;
        a.push_back(tmp);
        rem -= 1 << tmp;
    }

    stack<int> st;
    st.push(30);
    for (auto it = a.begin(); it != a.end(); ++it) {
        if (*it < st.top()) {
            st.push(*it);
        } else if (*it == st.top()) {
            int h = st.top();
            while (h == st.top()) {
                ++h;
                st.pop();
                if (h == 30) break;
            }
            st.push(h);
        } else {
            int h = st.top();
            rem -= 1 << h;
            it = a.insert(it, h);
            while (!st.empty() && h == st.top()) {
                ++h;
                st.pop();
            }
            st.push(h);
        }
    }

    list<int> b;
    while (!st.empty()) {
        int h = st.top();
        if (h == 30) break;
        rem -= 1 << h;
        b.push_back(h);
        while (!st.empty() && st.top() == h) {
            st.pop();
            ++h;
        }
        if (h < 30) st.push(h);
    }

    vector<int> v;
    for (; rem; rem -= rem & -rem) {
        b.push_back(__builtin_ctz(rem));
    }

    int left = n + k - a.size() - b.size();
    assert(left >= 0);

    auto it = b.begin();
    for (int i = 0; i < left; ++i) {
        while (*it == 0)
            ++it;
        --(*it);
        it = b.insert(it, *it);
    }

    a.splice(a.end(), b);

    copy(a.begin(), a.end(), ostream_iterator<int>(cout, " "));
    cout << endl;

    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 236 ms 33784 KB Output is correct
2 Correct 227 ms 33756 KB Output is correct
3 Correct 228 ms 33784 KB Output is correct
4 Correct 239 ms 33784 KB Output is correct
5 Correct 242 ms 33784 KB Output is correct
6 Correct 227 ms 33760 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 227 ms 33784 KB Output is correct
2 Correct 230 ms 33912 KB Output is correct
3 Execution timed out 1081 ms 31608 KB Time limit exceeded
4 Correct 231 ms 33996 KB Output is correct
5 Correct 228 ms 33796 KB Output is correct
6 Correct 227 ms 33864 KB Output is correct
7 Correct 229 ms 33732 KB Output is correct
8 Correct 229 ms 33864 KB Output is correct
9 Correct 221 ms 33880 KB Output is correct
10 Correct 180 ms 33784 KB Output is correct
11 Correct 198 ms 33788 KB Output is correct
12 Correct 153 ms 33656 KB Output is correct
13 Correct 165 ms 33680 KB Output is correct
14 Correct 153 ms 33768 KB Output is correct