제출 #245209

#제출 시각아이디문제언어결과실행 시간메모리
245209kostia244카멜레온의 사랑 (JOI20_chameleon)C++17
24 / 100
57 ms512 KiB
#include "chameleon.h"
#include <bits/stdc++.h>
using namespace std;
using vi = vector<int>;
bool add(vector<int> x, vector<int> v) {
	for(auto i : v) x.push_back(i);
	return Query(x) == x.size();
}
vector<int> seg(vector<int> v, int l, int r) {
	vector<int> res;
	while(l <= r) res.push_back(v[l++]);
	return res;
}
vector<int> pref(vector<int> v, int x) {
	return seg(v, 0, x);
}
void Solve(int n) {
	vector<vi> g(2*n+1);
	vi l, r;
	for(int i = 1; i <= 2*n; i++) (add(l, {i}) ? l : r).push_back(i);
	//while(l.size() != n);
	vector<int> c;
	for(int i = 0; i < n; i++) {
		int f = 0;
		while(f < n && !add({l[i]}, seg(r, f, n-1))) {
			for(int z = 1<<9; z>>=1;)
				if(f+z < n && add(seg(r, f, f+z), {l[i]})) f += z;
			f += Query({l[i], r[f]}) == 2;
			g[r[f]].push_back(l[i]);
			g[l[i]].push_back(r[f]);
			f++;
		}
	}
	set<pair<int, int>> bad;
	for(int i = 1; i <= 2*n; i++) {
		if(g[i].size() == 1) continue;
		if(Query({g[i][0], g[i][1], i}) == 1) bad.insert(minmax(g[i][2], i));
		else if(Query({g[i][0], g[i][2], i}) == 1) bad.insert(minmax(g[i][1], i));
		else bad.insert(minmax(g[i][0], i));
	}
	for(int i = 1; i <= 2*n; i++) {
		while(bad.count(minmax(i, g[i].back()))) g[i].pop_back();
		if(i < g[i].back())
		Answer(i, g[i].back());
	}
}

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

chameleon.cpp: In function 'bool add(std::vector<int>, std::vector<int>)':
chameleon.cpp:7:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  return Query(x) == x.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...