Submission #139387

#TimeUsernameProblemLanguageResultExecution timeMemory
139387mechfrog88Zalmoxis (BOI18_zalmoxis)C++14
40 / 100
190 ms19488 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#pragma GCC optimize("unroll-loops,no-stack-protector")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
 
using namespace __gnu_pbds;
using namespace std;
 
template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
 
typedef long long ll;
typedef long double ld;
 
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    ll n,k;
    cin >> n >> k;
    vector <ll> arr(n);
    vector <ll> low;
    ll mini = 30;
    for (int z=0;z<n;z++){
        cin >> arr[z];
    }
    ll c = 0;
    vector <ll> ans;
    vector <bool> lol;
    for (int z=0;z<n;z++){
        c += 1 << arr[z];
        for (int q=0;q<arr[z];q++){
            if (c & (1 << q)){
                ans.push_back(q);
                lol.push_back(true);
                c += 1 << q;
                k--;
            }
        }
        ans.push_back(arr[z]);
        lol.push_back(false);
    }
    for (int q=0;q<30;q++){
        if (c & (1 << q)){
            lol.push_back(true);
            ans.push_back(q);
            c += 1 << q;
            k--;
        }
    }
    for (int z=0;z<ans.size();z++){
        if (!lol[z]) {
            cout << ans[z] << " ";
            continue;
        }
        ll w = 0;
        bool ok = true;
        while (ans[z] > 0 && k > 0){
            if (ok) {k++; ok = false;}
            if (k < 2) break;
            ans[z]--;
            k -= 2;
            w += 2;
        }
        if (w > 1 && k == 1 && ans[z] > 1){
            cout << ans[z]-1 << " " << ans[z]-1 << " ";
            w--;
            k--;
        }
        if (w == 0){
            cout << ans[z] << " ";
        } else {
            for (int x=0;x<w;x++){
                cout << ans[z] << " ";
            }
        }   
    }
    cout << endl;
}

Compilation message (stderr)

zalmoxis.cpp: In function 'int main()':
zalmoxis.cpp:51:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int z=0;z<ans.size();z++){
                  ~^~~~~~~~~~~
zalmoxis.cpp:23:8: warning: unused variable 'mini' [-Wunused-variable]
     ll mini = 30;
        ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...