답안 #520184

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
520184 2022-01-28T17:08:55 Z prvocislo Zalmoxis (BOI18_zalmoxis) C++17
65 / 100
413 ms 262148 KB
#include <algorithm>
#include <iostream>
#include <string>
#include <random>
#include <chrono>
#include <vector>
#include <cmath>
#include <set>
#include <map>
#include <iomanip>
#include <queue>
#include <bitset>
#include <cmath>
typedef long long ll;
typedef long double ld;
using namespace std;

void compress(vector<int>& st)
{
    while (st.size() >= 2 && st[st.size() - 2] == st[st.size() - 1])
    {
        int x = st.back();
        st.pop_back();
        st.pop_back();
        st.push_back(x + 1);
    }
}
void split(int x, int k, vector<int>& v)
{
    //cout << x << " " << k << "\n";
    if (k == 1)
    {
        v.push_back(x);
        return;
    }
    int l = min(k - 1, 1 << (x - 2));
    split(x - 1, l, v);
    split(x - 1, k - l, v);
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n, k;
    cin >> n >> k;
    vector<int> v(n);
    for (int i = 0; i < n; i++) cin >> v[i];
    vector<int> st, ans1, added;
    for (int i = 0; i < n; i++)
    {
        while (!st.empty() && st.back() < v[i])
        {
            st.push_back(st.back());
            ans1.push_back(st.back());
            added.push_back(1);
            compress(st);
        }
        st.push_back(v[i]);
        ans1.push_back(v[i]);
        added.push_back(0);
        compress(st);
    }
    while (st.size() > 1 || st.back() < 30)
    {
        st.push_back(st.back());
        ans1.push_back(st.back());
        added.push_back(1);
        compress(st);
    }
    k = n + k - ans1.size();
    vector<int> ans2;
    for (int i = 0; i < ans1.size(); i++)
    {
        if (added[i])
        {
            int val = min(k + 1, 1 << (ans1[i] - 1));
            split(ans1[i], val, ans2);
            k -= val - 1;
        }
        else
        {
            ans2.push_back(ans1[i]);
        }
    }
    for (int i = 0; i < ans2.size(); i++)
    {
        cout << ans2[i] << " \n"[i == ans2.size() - 1];
    }
    return 0;
}

Compilation message

zalmoxis.cpp: In function 'int main()':
zalmoxis.cpp:72:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   72 |     for (int i = 0; i < ans1.size(); i++)
      |                     ~~^~~~~~~~~~~~~
zalmoxis.cpp:85:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |     for (int i = 0; i < ans2.size(); i++)
      |                     ~~^~~~~~~~~~~~~
zalmoxis.cpp:87:36: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   87 |         cout << ans2[i] << " \n"[i == ans2.size() - 1];
      |                                  ~~^~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 135 ms 18552 KB Output is correct
2 Correct 142 ms 18680 KB Output is correct
3 Correct 135 ms 18592 KB Output is correct
4 Correct 148 ms 18592 KB Output is correct
5 Correct 135 ms 18572 KB Output is correct
6 Correct 144 ms 18592 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 142 ms 18660 KB Output is correct
2 Runtime error 413 ms 262148 KB Execution killed with signal 9
3 Runtime error 407 ms 262148 KB Execution killed with signal 9
4 Correct 137 ms 18464 KB Output is correct
5 Correct 139 ms 18336 KB Output is correct
6 Correct 139 ms 18260 KB Output is correct
7 Correct 133 ms 18304 KB Output is correct
8 Correct 135 ms 20260 KB Output is correct
9 Runtime error 411 ms 262148 KB Execution killed with signal 9
10 Runtime error 371 ms 262148 KB Execution killed with signal 9
11 Runtime error 385 ms 262148 KB Execution killed with signal 9
12 Runtime error 356 ms 262148 KB Execution killed with signal 9
13 Runtime error 352 ms 262148 KB Execution killed with signal 9
14 Correct 69 ms 6260 KB Output is correct