제출 #647919

#제출 시각아이디문제언어결과실행 시간메모리
647919rainboyBroken Device 2 (JOI22_device2)C++17
13 / 100
2091 ms25924 KiB
/* https://www.ioi-jp.org/camp/2022/2022-sp-tasks/contest3/device2-review.pdf */
#include "Anna.h"
#include <vector>

using namespace std;

const int L = 2000;

typedef vector<int> vi;

namespace {
	int f(int l) {
		if (l == 1)
			return 3;
		if (l == 2)
			return 6;
		return (l * 2 - 3) * 4;
	}

	int g(int l, int k) {
		int n = 0;
		if (k >= 4)
			n++;
		if (l * 2 - k >= 4)
			n++;
		if (k >= 2 && l * 2 - k >= 2)
			n += 2;
		if (n == 0)
			n = 1;
		return n;
	}
}

int Declare() {
	return L;
}

pair<vi, vi> Anna(long long x) {
	x--;
	int l = 1;
	while (x >= f(l))
		x -= f(l++);
	int k = 0;
	while (x >= g(l, k))
		x -= g(l, k++);
	vi aa(l, 0), bb(l, 0);
	if (k >= 4 && x-- == 0) {
		aa[0] = bb[0] = 1;
		aa[l - 1] = bb[l - 1] = 1;
		if (k <= l + 2)
			for (int i = 1; i <= k - 4; i++)
				aa[i] = 1;
		else {
			for (int i = 1; i <= l - 2; i++)
				aa[i] = 1;
			for (int i = 1; i <= k - l - 2; i++)
				bb[i] = 1;
		}
	} else if (l * 2 - k >= 4 && x-- == 0) {
		aa[0] = bb[0] = 0;
		aa[l - 1] = bb[l - 1] = 0;
		if (k <= l - 2)
			for (int i = 1; i <= k; i++)
				aa[i] = 1;
		else {
			for (int i = 1; i <= l - 2; i++)
				aa[i] = 1;
			for (int i = 1; i <= k - l + 2; i++)
				bb[i] = 1;
		}
	} else if (k >= 2 && l * 2 - k >= 2 && x-- == 0) {
		aa[0] = bb[0] = 0;
		aa[l - 1] = bb[l - 1] = 1;
		if (k <= l)
			for (int i = 1; i <= k - 2; i++)
				aa[i] = 1;
		else {
			for (int i = 1; i <= l - 2; i++)
				aa[i] = 1;
			for (int i = 1; i <= k - l; i++)
				bb[i] = 1;
		}
	} else if (k >= 2 && l * 2 - k >= 2 && x-- == 0) {
		aa[0] = bb[0] = 1;
		aa[l - 1] = bb[l - 1] = 0;
		if (k <= l)
			for (int i = 1; i <= k - 2; i++)
				aa[i] = 1;
		else {
			for (int i = 1; i <= l - 2; i++)
				aa[i] = 1;
			for (int i = 1; i <= k - l; i++)
				bb[i] = 1;
		}
	} else {
		if (k <= l)
			for (int i = 0; i < k; i++)
				aa[i] = 1;
		else {
			for (int i = 0; i < l; i++)
				aa[i] = 1;
			for (int i = 0; i < k - l; i++)
				bb[i] = 1;
		}
	}
	return make_pair(aa, bb);
}
/* https://www.ioi-jp.org/camp/2022/2022-sp-tasks/contest3/device2-review.pdf */
#include "Bruno.h"
#include <vector>

using namespace std;

typedef vector<int> vi;

namespace {
	int f(int l) {
		if (l == 1)
			return 3;
		if (l == 2)
			return 6;
		return (l * 2 - 3) * 4;
	}

	int g(int l, int k) {
		int n = 0;
		if (k >= 4)
			n++;
		if (l * 2 - k >= 4)
			n++;
		if (k >= 2 && l * 2 - k >= 2)
			n += 2;
		if (n == 0)
			n = 1;
		return n;
	}
}

long long Bruno(vi cc) {
	int l = cc.size() / 2, k = 0;
	for (int i = 0; i < l * 2; i++)
		if (cc[i] == 1)
			k++;
	int x = 1;
	for (int l_ = 1; l_ < l; l_++)
		x += f(l_);
	for (int k_ = 0; k_ < k; k_++)
		x += g(l, k_);
	if (g(l, k) > 1) {
		if (cc[0] == 1 && cc[l * 2 - 1] == 1)
			return x;
		if (k >= 4)
			x++;
		if (cc[0] == 0 && cc[l * 2 - 1] == 0)
			return x;
		if (l * 2 - k >= 4)
			x++;
		if (cc[0] == 0 && cc[l * 2 - 1] == 1)
			return x;
		if (k >= 2 && l * 2 - k >= 2)
			x++;
	}
	return x;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...