Submission #388195

#TimeUsernameProblemLanguageResultExecution timeMemory
388195alexxela12345식물 비교 (IOI20_plants)C++17
5 / 100
4089 ms8764 KiB
#include <bits/stdc++.h>
#include "plants.h"

using namespace std;

int n;
int k;
vector<int> r;

vector<int> prefr;

void init(int k_, std::vector<int> r_) {
	k = k_;
	r = r_;
	n = r.size();
    prefr.resize(n + 1);
    for (int i = 1; i <= n; i++) {
        prefr[i] = prefr[i - 1] + r[i - 1];
    }
}

int get_sum(int l, int r) {
    if (l <= r) {
        return prefr[r] - prefr[l];
    }
    return prefr[n] - prefr[l] + prefr[r];
}

int compare_plants(int x, int y) {
    if (k == 2) {
        int a = get_sum(x, y);
        int b = get_sum(y, x); 
        int A = y - x;
        if (A < 0)
            A += n;
        int B = n - A;
        if (a == 0) {
            return 1;
        } else if (a == A) {
            return -1;
        }
        if (b == 0) {
            return -1;
        } else if (b == B) {
            return 1;
        }
        return 0;
    }
	bool gr, le;
	gr = le = false;
	vector<int> arr(n);
	iota(arr.begin(), arr.end(), 0);
	do {
		vector<int> r2(n);
		for (int i = 0; i < n; i++) {
			for (int j = 1; j < k; j++) {
				if (arr[i] < arr[(i + j) % n]) {
					r2[i]++;
				}
			}
		}
		if (r2 == r) {
			if (arr[x] < arr[y])
				le = 1;
			else
				gr = 1;
		}
	} while (next_permutation(arr.begin(), arr.end()));
	if (!le)
		return 1;
	if (!gr)
		return -1;
	return 0;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...