Submission #1363487

#TimeUsernameProblemLanguageResultExecution timeMemory
1363487retardeComparing Plants (IOI20_plants)C++20
0 / 100
0 ms344 KiB
#include "plants.h"
#include <bits/stdc++.h>
using namespace std;

int n;
vector<vector<int>> adj; // i -> j implies h[i] > h[j]
int mat[301][301];

void dfs(int node, vector<int> &vis, int source) {
	mat[source][node] = 1;
	for (auto &neighbour : adj[node]) {
		if (vis[neighbour]) continue;
		dfs(neighbour, vis, source);
	}
}

void init(int k, vector<int> r) {
	n = (int)r.size();
	vector<int> handled(n); adj.resize(n);
	while (accumulate(handled.begin(), handled.end(), (int)0) != n) {
		int pos = -1;
		for (int i = 0; i < n; i++) {
			if (handled[i]) continue;
			int s = 0; for (int j = i + 1; j < i+k; j++) s += handled[j%n];
			if (s == r[i]) {
				pos = i;
				break;
			}
		}
		assert(pos != -1);
		if (pos == -1) break;

		for (int j = pos + 1; j < pos + k; j++) {
			if (handled[j%n]) {adj[j%n].push_back(pos); continue;}
			adj[pos].push_back(j%n);
			// cout << "edge from " << pos << " -> " << j%n << '\n';
		}

		handled[pos] = 1;
	}
	for (int i = 0; i < n; i++) {
		vector<int> vis(n);
		dfs(i, vis, i);
	}
}

int compare_plants(int x, int y) {
	// cout << "query" << mat[x][y] << " " << mat[y][x] << '\n';
	if (!mat[x][y] && !mat[y][x]) return 0;
	if (mat[x][y]) return 1;
	else return -1;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...