Submission #39716

#TimeUsernameProblemLanguageResultExecution timeMemory
39716funcsrGondola (IOI14_gondola)C++14
90 / 100
23 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() #define MOD 1000000009 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]; int replacement(int N, int gondolaSeq[], int replacementSeq[]) { set<int> unused; 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; int unused = 0; rep(i, N) if (A[i] >= N) unused++; int m = *max_element(A, A+N); int s = 1; if (!glock) s *= N; int c = 0; for (int i=N; i<=m; i++) { int p = -1; if (cnt[i]) { p = rev[i]; unused--; } else { s = (1LL*s*unused)%MOD; } } return s; }

Compilation message (stderr)

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:64:9: warning: variable 'p' set but not used [-Wunused-but-set-variable]
     int p = -1;
         ^
gondola.cpp:62:7: warning: unused variable 'c' [-Wunused-variable]
   int c = 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...