Submission #1225635

#TimeUsernameProblemLanguageResultExecution timeMemory
1225635fermat곤돌라 (IOI14_gondola)C++20
100 / 100
14 ms6212 KiB
#include "gondola.h" //#include "grader.cpp" #include <bits/stdc++.h> using namespace std; const int N = 1e6 + 5; int b[N], ind[N], mx, sz, cnt[N], mod = 1e9 + 9; int valid(int n, int a[]) { int pos = -1; for (int i = 0; i < n; i++) { if (a[i] <= n) { pos = i; } cnt[a[i]]++; if (cnt[a[i]] > 1) return 0; } if (pos == -1) { return 1; } else { assert(a[pos] <= n); int cn = a[pos]; for (int i = (pos + 1) % n; i != pos; i = (i + 1) % n) { cn++; if (cn > n) cn -= n; if (a[i] > n) { continue; } if (a[i] != cn) { return 0; } } } return 1; } int replacement(int n, int a[], int ans[]) { memset(ind, -1, sizeof(ind)); int pos = -1; for (int i = 0; i < n; i++) { if (a[i] <= n) { pos = i; } if (a[i] > a[mx]) { mx = i; } ind[a[i]] = i; } if (pos == -1) { for (int i = 0; i < n; i++) { b[i] = i + 1; } } else { int cn = a[pos]; b[pos] = a[pos]; for (int i = (pos + 1) % n; i != pos; i = (i + 1) % n) { cn++; if (cn > n) cn -= n; b[i] = cn; } } for (int i = n + 1; i <= a[mx]; i++) { if (ind[i] == -1) { ans[sz++] = b[mx]; b[mx] = i; } else { ans[sz++] = b[ind[i]]; b[ind[i]] = i; } } return sz; } long long binpow (long long a, int b) { if (b == 0) return 1; if (b & 1) return a * 1ll * binpow(a, b - 1) % mod; long long asd = binpow(a, b >> 1); return asd * 1ll * asd % mod; } int countReplacement(int n, int a[]) { int pos = -1; long long res = 1; for (int i = 0; i < n; i++) { if (a[i] <= n) { pos = i; } } if (pos == -1) { res = n; } else { int cn = a[pos]; for (int i = (pos + 1) % n; i != pos; i = (i + 1) % n) { cn++; if (cn > n) cn -= n; if (a[i] > n) { continue; } if (a[i] != cn) { return 0; } } } sort(a, a + n); for (int i = 0; i < n; i++) { if (a[i] <= n) continue; if (i > 0 && a[i] == a[i - 1]) return 0; res *= binpow((n - i) * 1ll, ( (i == 0 || a[i - 1] <= n) ? a[i] - n - 1 : a[i] - a[i - 1] - 1) ); res %= mod; } return res; }
#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...