Submission #861863

# Submission time Handle Problem Language Result Execution time Memory
861863 2023-10-17T05:26:40 Z maks007 Zalmoxis (BOI18_zalmoxis) C++14
100 / 100
116 ms 28716 KB
#include "bits/stdc++.h"

using namespace std;

#define int long long

int k;
vector <pair <int,int>> ans;
vector <int> a;

void decomp(int v) {
	stack <int> q;
	vector <int> ans2;
	q.push(v);
	while(q.size() + ans2.size() != k + 1) {
		if(q.size() == 0) break;
		int v = q.top();
		q.pop();
		if(v == 0) {
			ans2.push_back(v);
			continue;
		}
		q.push(v-1);
		q.push(v-1);
	}
	k -= (int)q.size() + (int)ans2.size() - 1;
	while(q.size()) {
		int v =q.top();
		q.pop();
		ans2.push_back(v);
	} 
	for(auto i : ans2) cout << i << " ";
}

void f(int v) {
	if(a.size() == 0) {
		ans.push_back({v, 1});
		return;
	}
	if(v == a.back()) {
		ans.push_back({v,0});
		a.pop_back();
		return;
	}
	if(a.back() > v) {
		ans.push_back({v,1});
		return;
	}
	f(v-1);
	f(v-1);
}

signed main () {
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	int n, cnt = 0;
	cin >> n >> k;
	for(int i = 0; i < n; i ++) {
		int x;
		cin >> x;
		a.push_back(x);
	}
	reverse(a.begin(), a.end());

	f(30);
	// assert()
	// for(auto i : ans) cout << i.first << " ";
		
	for(auto i : ans) k -= i.second;
	// if(k < 0) {
	// 	while(1){}
	// }
	for(auto i : ans) {
		if(i.second == 0) cout << i.first << " ";
		else if(k){
			decomp(i.first);
		}else cout << i.first << " ";
	}
	return 0;
}

Compilation message

zalmoxis.cpp: In function 'void decomp(long long int)':
zalmoxis.cpp:15:31: warning: comparison of integer expressions of different signedness: 'std::stack<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   15 |  while(q.size() + ans2.size() != k + 1) {
      |        ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~
zalmoxis.cpp: In function 'int main()':
zalmoxis.cpp:56:9: warning: unused variable 'cnt' [-Wunused-variable]
   56 |  int n, cnt = 0;
      |         ^~~
# Verdict Execution time Memory Grader output
1 Correct 106 ms 27692 KB Output is correct
2 Correct 109 ms 27692 KB Output is correct
3 Correct 110 ms 28496 KB Output is correct
4 Correct 106 ms 28480 KB Output is correct
5 Correct 109 ms 27660 KB Output is correct
6 Correct 105 ms 27704 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 108 ms 27552 KB Output is correct
2 Correct 109 ms 27960 KB Output is correct
3 Correct 116 ms 28716 KB Output is correct
4 Correct 114 ms 27696 KB Output is correct
5 Correct 107 ms 27692 KB Output is correct
6 Correct 106 ms 27944 KB Output is correct
7 Correct 106 ms 27644 KB Output is correct
8 Correct 109 ms 27960 KB Output is correct
9 Correct 108 ms 27208 KB Output is correct
10 Correct 73 ms 17460 KB Output is correct
11 Correct 85 ms 22208 KB Output is correct
12 Correct 55 ms 9392 KB Output is correct
13 Correct 53 ms 8200 KB Output is correct
14 Correct 55 ms 9628 KB Output is correct