이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <cstdio>
#include <vector>
#include <algorithm>
typedef std::vector<int> vector;
int query(vector v) { // this is why C++ > Haskell
	int ans;
	if(v.size() == 0) return 0;
	printf("%lu", v.size());
	for(int c: v) printf(" %d", c);
	putchar('\n');
	fflush(stdout);
	scanf("%d", &ans);
	return ans;
}
void yes(vector v) {
	putchar('0');
	for(int c: v) printf(" %d", c);
	putchar('\n');
	fflush(stdout);
}
vector solve(int l, int r) {
	int m, l1, r1, m1, i, j, mx1, mx2, c, cur;
	int rep1[210] = {0};
	int rep2[210] = {0};
	int now[210] = {0};
	vector v1, v2, qr;
	if(l == r) return {1};
	m = (l + r) / 2;
	v1 = solve(l, m);
	v2 = solve(m + 1, r);
	for(i = 0; i < v1.size(); i++) rep1[v1[i]] = l + i;
	for(i = 0; i < v2.size(); i++) rep2[v2[i]] = m + 1 + i;
	mx1 = *std::max_element(v1.begin(), v1.end());
	mx2 = *std::max_element(v2.begin(), v2.end());
	cur = mx2;
	for(i = 1; i <= mx1; i++) {
		c = rep1[i];
		l1 = 1;
		r1 = mx2 + 1;
		while(l1 < r1) {
			m1 = (l1 + r1) / 2;
			for(j = 1; j <= m1; j++) qr.push_back(rep2[j]);
			qr.push_back(c);
			if(m1 == mx2 + 1 || query(qr) == m1) r1 = m1;
			else l1 = m1 + 1;
			qr.clear();
		}
		now[i] = l1 == mx2 + 1 ? ++cur : l1;
	}
	for(i = 0; i < v1.size(); i++)
		v1[i] = now[v1[i]];
	v1.insert(v1.end(), v2.begin(), v2.end());
	return v1;
}
int main(void) {
	int n;
	scanf("%d", &n);
	yes(solve(1, n));
	return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
carnival.cpp: In function 'vector solve(int, int)':
carnival.cpp:31:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(i = 0; i < v1.size(); i++) rep1[v1[i]] = l + i;
             ~~^~~~~~~~~~~
carnival.cpp:32:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(i = 0; i < v2.size(); i++) rep2[v2[i]] = m + 1 + i;
             ~~^~~~~~~~~~~
carnival.cpp:50:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(i = 0; i < v1.size(); i++)
             ~~^~~~~~~~~~~
carnival.cpp: In function 'int query(vector)':
carnival.cpp:12:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &ans);
  ~~~~~^~~~~~~~~~~~
carnival.cpp: In function 'int main()':
carnival.cpp:57:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &n);
  ~~~~~^~~~~~~~~~| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |