제출 #476255

#제출 시각아이디문제언어결과실행 시간메모리
476255Hamed5001사육제 (CEOI14_carnival)C++14
100 / 100
19 ms316 KiB
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

const int mxN = 150;

struct DSU {
	int N;
	vector<int> P;

	DSU(int N) : N(N) {
		P.resize(N);
		for (int i = 0; i < N; i++)
			P[i] = i;
	}

	int getParent(int a) {
		return P[a] = (P[a] == a ? a : getParent(P[a]));
	}

	void unite(int a, int b) {
		a = getParent(a);
		b = getParent(b);
		P[a] = b;
	}
};

DSU d(mxN);

bool query(int l, int r, int x) {
	set<int> st;
	st.insert(d.getParent(x));
	cout << (r-l+2) << ' ' << x+1;
	for (int i = l; i <= r; i++)
		cout << ' ' << i+1, st.insert(d.getParent(i));
	cout << endl;
	int res;
	cin >> res;
	return res == st.size();
}

int ID[mxN];

void solve() {
	int N, id = 1;
	cin >> N;	  

	for (int i = 1; i < N; i++) {
		if (query(0, i-1, i))
			continue;
		int l = 0, r = i-1, mid;
		while(l < r) {
			mid = (l+r)>>1;
			if (query(0, mid, i))
				l = mid+1;
			else
				r = mid;
		}
		d.unite(l, i);
	}
		
	vector<int> ans(N);
	for (int i = 0; i < N; i++) {
		if (!ID[d.getParent(i)])
			ID[d.getParent(i)] = id++;
		ans[i] = ID[d.getParent(i)];
	}
	cout << 0;
	for (auto &it : ans) cout << ' ' << it;
	cout << endl;
}

int main() {

	
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	solve();
	return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

carnival.cpp: In function 'bool query(int, int, int)':
carnival.cpp:40:13: warning: comparison of integer expressions of different signedness: 'int' and 'std::set<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   40 |  return res == st.size();
      |         ~~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...