# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1153085 | vladilius | 곤돌라 (IOI14_gondola) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define pb push_back
#define ff first
#define ss second
const int A = 2.5e5;
int valid(int n, int x[]){
vector<bool> f(A + 1);
int m = 0;
for (int i = 0; i < n; i++){
if (f[x[i]]) return 0;
f[x[i]] = 1;
m = max(m, x[i]);
}
pii mn = {1e9, 0};
for (int i = 0; i < n; i++) mn = min(mn, {x[i], i});
int p = mn.ss;
vector<int> y(n);
for (int i = 0; i < n; i++){
int j = i - p;
if (j < 0) j += n;
y[j] = x[i];
}
int X = y[0];
for (int i = 1; i < n; i++){
if (y[i] > n) continue;
int Y = y[i] - i;
if (Y < 0) Y += n;
if (Y != X) return 0;
}
if (m >= 2 * n) return 1;
int cc = 0;
for (int i = 1; i <= n; i++) cc += f[i];
if ((n - cc) > (m - n)) return 0;
return 1;
}