Submission #763143

#TimeUsernameProblemLanguageResultExecution timeMemory
763143SanguineChameleonGame (IOI14_game)C++17
100 / 100
297 ms27016 KiB
#include "game.h"
#include <bits/stdc++.h>
using namespace std;

const int maxn = 1.5e3 + 20;
bool done[maxn][maxn];
pair<int, int> range[maxn];
int color[maxn][maxn];
int cnt[maxn];

void initialize(int n) {
	for (int i = 0; i < n; i++) {
		for (int j = i + 1; j < n; j++) {
			color[i][j] = -1;
		}
	}
	for (int i = 0; i < n - 1; i++) {
		range[i] = make_pair(0, n - 1);
	}
}

int hasEdge(int u, int v) {
	if (u > v) {
		swap(u, v);
	}
	if (u + 1 == v) {
		for (int i = range[u].first; i <= u; i++) {
			for (int j = v; j <= range[u].second; j++) {
				if (!done[i][j] && color[i][j] == -1) {
					color[i][j] = u;
					cnt[u]++;
				}
			}
		}
		for (int i = range[u].first; i < u; i++) {
			range[i].second = u;
		}
		for (int i = v; i < range[u].second; i++) {
			range[i].first = v;
		}
	}
	done[u][v] = true;
	if (color[u][v] == -1) {
		return 0;
	}
	cnt[color[u][v]]--;
	if (cnt[color[u][v]] == 0) {
		return 1;
	}
	else {
		return 0;
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...