Submission #28571

#TimeUsernameProblemLanguageResultExecution timeMemory
28571Official Fan of ACG (#68)1-Color Coloring (FXCUP2_coloring)C++14
1 / 1
0 ms1940 KiB
#include "coloring.h"
#include<vector>
#include<algorithm>
#include<set>
#include<random>
using namespace std;

int colorCnt;

int find_back(int x, vector<int> cands, mt19937& g) {
	shuffle(cands.begin(), cands.end(), g);
	int st = colorCnt;
	int lo = 0, hi = cands.size() - 1;
	while (lo < hi) {
		int mid = (lo + hi) / 2;
		int L = mid - lo + 1, R = hi - mid;
		if (L > R) mid--;
		// color lo...mid
		for (int i = lo; i <= mid; i++) Color(cands[i]), colorCnt++;
		int cnt = GetColor(x);
		if (!cnt) hi = mid;
		else lo = mid + 1;
	}
	int ed = colorCnt;
	return cands[lo];
}

void ColoringSame(int N){
	random_device rd;
	mt19937 g(rd());
	colorCnt = 0;
	vector<int> chain;
	set<int> cands;
	for (int i = 2; i <= N; i++) cands.insert(i);
	chain.push_back(find_back(1, vector<int>(cands.begin(), cands.end()), g));
	cands.erase(cands.find(chain.back()));

	while (1) {
		int X = chain.size();
		int left = 1 + (N - X - 1)*(N - X - 1) + X;
		if (colorCnt + left <= 7300) {
			Color(1);
			for (int d : cands) for (int c : cands) Color(c);
			reverse(chain.begin(), chain.end());
			for (int x : chain) Color(x);
			return;
		}
		else {
			chain.push_back(find_back(chain.back(), vector<int>(cands.begin(), cands.end()), g));
			cands.erase(cands.find(chain.back()));
		}
	}
}

Compilation message (stderr)

coloring.cpp: In function 'int find_back(int, std::vector<int>, std::mt19937&)':
coloring.cpp:12:6: warning: unused variable 'st' [-Wunused-variable]
  int st = colorCnt;
      ^
coloring.cpp:24:6: warning: unused variable 'ed' [-Wunused-variable]
  int ed = colorCnt;
      ^
coloring.cpp: In function 'void ColoringSame(int)':
coloring.cpp:43:13: warning: unused variable 'd' [-Wunused-variable]
    for (int d : cands) for (int c : cands) Color(c);
             ^
#Verdict Execution timeMemoryGrader output
Fetching results...