답안 #255210

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
255210 2020-07-31T14:32:15 Z Kastanda Zalmoxis (BOI18_zalmoxis) C++11
35 / 100
230 ms 24396 KB
// M
#include<bits/stdc++.h>
using namespace std;
const int N = 1000006;
int n, k, kk, A[N];
vector < int > Rs;
inline bool Check()
{
        vector < int > Stk;
        for (int i = 0; i < (int)Rs.size(); i ++)
        {
                int nw = Rs[i];
                if (Stk.size() && Stk.back() < nw)
                        return 0;
                while (Stk.size() && Stk.back() == nw)
                        Stk.pop_back(), nw ++;
                Stk.push_back(nw);
        }
        return (Stk.size() == 1 && Stk[0] == 30);
}
void Print(int a)
{
        if (k > (1 << a) - 1)
        {
                for (int i = 0; i < (1 << a); i ++)
                        Rs.push_back(0);
                k -= (1 << a) - 1;
                return ;
        }
        while (a && k)
        {
                if ((1 << (a - 1)) <= k)
                {
                        for (int i = 0; i < (1 << (a - 1)); i ++)
                                Rs.push_back(0);
                        k -= 1 << (a - 1);
                        a --;
                        continue;
                }
                Rs.push_back(a - 1);
                k --; a --;
        }
        Rs.push_back(a);
        return ;

        /*if (!k || !a)
                return void(printf("%d ", a));
        k --;
        Print(a - 1);
        Print(a - 1);
        return ;*/
}
int main()
{
        scanf("%d%d", &n, &k); kk = k;
        for (int i = 1; i <= n; i ++)
                scanf("%d", &A[i]);
        vector < pair < int , int > > R;
        vector < int > Stk;
        Stk.push_back(A[1]);
        R.push_back({A[1], 0});
        A[++ n] = 30;
        for (int i = 2; i <= n; i ++)
        {
                int nw = A[i];
                while (Stk.size() && Stk.back() == nw)
                        Stk.pop_back(), nw ++;
                if (!Stk.size() || Stk.back() > nw)
                        Stk.push_back(nw);
                else
                {
                        assert(nw == A[i]);
                        R.push_back({Stk.back(), 1}), k --;
                        while (Stk.size() && Stk.back() < nw)
                        {
                                int a = Stk.back(), c = 0;
                                Stk.pop_back();
                                int trg = Stk.size() ? Stk.back() : 30;
                                trg = min(trg, nw);
                                while (a < trg)
                                {
                                        if (c)
                                                R.push_back({a, 1}), k --;
                                        a ++; c ++;
                                }
                        }
                        while (Stk.size() && Stk.back() == nw)
                                Stk.pop_back(), nw ++;
                        Stk.push_back(nw);
                        nw = A[i];
                        while (Stk.size() && Stk.back() == nw)
                                Stk.pop_back(), nw ++;
                }
                R.push_back({A[i], 0});
        }
        R.pop_back(); n --;
        for (auto X : R)
        {
                if (!X.second)
                        Rs.push_back(X.first);
                else
                        Print(X.first);
        }
        //assert((int)Rs.size() == n + kk);
        //assert(Check());
        for (int a : Rs)
                printf("%d ", a);
        printf("\n");
        return 0;
}

Compilation message

zalmoxis.cpp: In function 'int main()':
zalmoxis.cpp:55:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d", &n, &k); kk = k;
         ~~~~~^~~~~~~~~~~~~~~~
zalmoxis.cpp:57:22: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
                 scanf("%d", &A[i]);
                 ~~~~~^~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 208 ms 22224 KB Output is correct
2 Correct 196 ms 22228 KB Output is correct
3 Correct 206 ms 22224 KB Output is correct
4 Correct 203 ms 22224 KB Output is correct
5 Correct 201 ms 22228 KB Output is correct
6 Correct 201 ms 22228 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 203 ms 22224 KB not a zalsequence
2 Incorrect 203 ms 22352 KB Expected EOF
3 Incorrect 211 ms 24396 KB Expected EOF
4 Incorrect 206 ms 22224 KB not a zalsequence
5 Incorrect 230 ms 22292 KB not a zalsequence
6 Incorrect 204 ms 22224 KB not a zalsequence
7 Incorrect 204 ms 22228 KB not a zalsequence
8 Incorrect 209 ms 22228 KB not a zalsequence
9 Incorrect 189 ms 20944 KB not a zalsequence
10 Incorrect 130 ms 10980 KB not a zalsequence
11 Incorrect 146 ms 17488 KB not a zalsequence
12 Incorrect 87 ms 6488 KB not a zalsequence
13 Incorrect 81 ms 6372 KB not a zalsequence
14 Correct 77 ms 6368 KB Output is correct