답안 #641065

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
641065 2022-09-15T22:49:52 Z ymm 사육제 (CEOI14_carnival) C++17
0 / 100
67 ms 464 KB
#include <bits/stdc++.h>
#define Loop(x,l,r) for (ll x = (l); x < (r); ++x)
#define LoopR(x,l,r) for (ll x = (r)-1; x >= (l); --x)
typedef long long ll;
typedef std::pair<int, int> pii;
typedef std::pair<ll , ll > pll;
using namespace std;

const int N = 160;
int ans[N];
int n;

int ask(vector<int> v)
{
	cout << v.size() << ' ';
	for (int x : v)
		cout << x+1 << ' ';
	cout << '\n';
	int ans;
	cin >> ans;
	return ans;
}

void solve(vector<int> v)
{
	int len = v.size();
	if (len == 1)
		return;
	solve(vector<int>(v.begin(), v.begin() + len/2));
	solve(vector<int>(v.begin() + len/2, v.end()));
	vector<vector<int>> cl, cr;
	Loop (i,0,len/2) {
		while (ans[v[i]] >= cl.size())
			cl.emplace_back();
		cl[ans[v[i]]].push_back(v[i]);
	}
	Loop (i,len/2,len) {
		while (ans[v[i]] >= cr.size())
			cr.emplace_back();
		cr[ans[v[i]]].push_back(v[i]);
		ans[v[i]] += cl.size();
	}
	Loop (i,0,cl.size())
		assert(cl[i].size());
	Loop (i,0,cr.size())
		assert(cr[i].size());
	vector<int> rem;
	Loop (i,0,cl.size()) {
		int l = 0, r = cr.size();
		while (l < r) {
			int m = (l + r + 1)/2;
			vector<int> vec;
			vec.push_back(cl[i][0]);
			Loop (j,l,m) vec.push_back(cr[j][0]);
			if (ask(vec) != vec.size())
				r = m-1;
			else
				l = m;
		}
		if (l < cr.size()) {
			for (int x : cr[l])
				ans[x] = i;
			rem.push_back(l + cl.size());
		}
	}
	for (int x : v) {
		ans[x] -= lower_bound(rem.begin(), rem.end(), ans[x]) - rem.begin();
	}
	Loop (i,0,n)
		cerr << ans[i] << ' ';
	cerr << "!\n";
}

int main()
{
	ios::sync_with_stdio(false);
	cin >> n;
	vector<int> vec(n);
	iota(vec.begin(), vec.end(), 0);
	solve(vec);
	cout << "0 ";
	Loop (i,0,n)
		cout << ans[i]+1 << ' ';
	cout << '\n';
}

Compilation message

carnival.cpp: In function 'void solve(std::vector<int>)':
carnival.cpp:33:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   33 |   while (ans[v[i]] >= cl.size())
      |          ~~~~~~~~~~^~~~~~~~~~~~
carnival.cpp:38:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |   while (ans[v[i]] >= cr.size())
      |          ~~~~~~~~~~^~~~~~~~~~~~
carnival.cpp:2:40: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    2 | #define Loop(x,l,r) for (ll x = (l); x < (r); ++x)
      |                                        ^
carnival.cpp:43:2: note: in expansion of macro 'Loop'
   43 |  Loop (i,0,cl.size())
      |  ^~~~
carnival.cpp:2:40: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    2 | #define Loop(x,l,r) for (ll x = (l); x < (r); ++x)
      |                                        ^
carnival.cpp:45:2: note: in expansion of macro 'Loop'
   45 |  Loop (i,0,cr.size())
      |  ^~~~
carnival.cpp:2:40: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    2 | #define Loop(x,l,r) for (ll x = (l); x < (r); ++x)
      |                                        ^
carnival.cpp:48:2: note: in expansion of macro 'Loop'
   48 |  Loop (i,0,cl.size()) {
      |  ^~~~
carnival.cpp:55:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   55 |    if (ask(vec) != vec.size())
      |        ~~~~~~~~~^~~~~~~~~~~~~
carnival.cpp:60:9: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   60 |   if (l < cr.size()) {
      |       ~~^~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Runtime error 28 ms 448 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 13 ms 464 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 44 ms 332 KB Output is correct
2 Runtime error 16 ms 460 KB Execution killed with signal 6
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 62 ms 440 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 67 ms 340 KB Output is correct
2 Runtime error 33 ms 444 KB Execution killed with signal 6
3 Halted 0 ms 0 KB -