Submission #39715

#TimeUsernameProblemLanguageResultExecution timeMemory
39715funcsr곤돌라 (IOI14_gondola)C++14
55 / 100
33 ms7576 KiB
#include "gondola.h" #include <iostream> #include <vector> #include <cassert> #include <set> #include <algorithm> using namespace std; #define rep(i, n) for (int i=0; i<(n); i++) #define all(x) x.begin(), x.end() int A[100000], cur[100000]; int cnt[250000]; bool glock; int valid(int N, int inputSeq[]) { rep(i, 250000) cnt[i] = 0; rep(i, N) A[i] = inputSeq[i]-1; rep(i, N) cnt[A[i]]++; rep(i, 250000) if (cnt[i] > 1) return 0; int base = -1; rep(i, N) if (A[i] < N) base = (A[i]-i+N)%N; rep(i, N) cur[i] = (i+max(0,base))%N; glock = false; if (base == -1) return 1; glock = true; rep(i, N) if (A[i] < N && A[i] != cur[i]) return 0; return 1; } //---------------------- int rev[250000]; set<int> unused; int replacement(int N, int gondolaSeq[], int replacementSeq[]) { assert(valid(N, gondolaSeq)); rep(i, N) rev[A[i]] = i; rep(i, N) if (A[i] >= N) unused.insert(i); int m = *max_element(A, A+N); int c = 0; for (int i=N; i<=m; i++) { int p = -1; if (cnt[i]) { p = rev[i]; unused.erase(rev[i]); } else p = *unused.begin(); replacementSeq[c++] = cur[p]+1; cur[p] = i; } return c; } //---------------------- int countReplacement(int N, int inputSeq[]) { if (valid(N, inputSeq) == 0) return 0; return -3; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...