이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "trilib.h"
using namespace std;
#define sz(x) ((int)size(x))
#define all(x) begin(x), end(x)
#define trace(x) cout << #x << ": " << (x) << endl;
typedef long long ll;
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
int rand(int l, int r) { return (int) ((ll) rnd() % (r - l + 1)) + l; }
const int N = 40000;
const ll infL = 3e18;
int n;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
n = get_n();
int cnt = 0;
for (int s = 0; s < n; ++s) {
//pseudo Jarvis algorithm
int uu = -1;
int p0 = s, pi = s;
int k = 0;
vector<bool> used(n);
vector<int> p(n, -1);
do {
used[p0] = true;
pi = -1;
for (int i = 0; i < n; ++i) {
if (p0 != i && pi != -1) {
assert(cnt < 1000000);
++cnt;
if (is_clockwise(p0 + 1, pi + 1, i + 1))
pi = i;
} else if (p0 != i) {
pi = i;
}
}
p[pi] = p0;
p0 = pi;
if (uu == -2) {
uu = pi;
}
if (uu == -1) {
uu = -2;
}
} while (!used[pi]);
fill(all(used), false);
do {
++k;
used[pi] = true;
pi = p[pi];
} while (pi != p0);
assert(uu >= 0 && used[uu]);
give_answer(k);
return 0;
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |