Submission #920791

#TimeUsernameProblemLanguageResultExecution timeMemory
920791rxlfd314Gondola (IOI14_gondola)C++17
80 / 100
40 ms5088 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; #define vt vector #define size(x) (int((x).size())) #define all(x) begin(x), end(x) #define REP(a, b, c, d) for (int a = (b); (d) > 0 ? a <= (c) : a >= (c); a += (d)) #define FOR(a, b, c) REP(a, b, c, 1) #define ROF(a, b, c) REP(a, b, c, -1) int valid(int N, int *A) { map<int, int> cnt; FOR(i, 0, N-1) if (++cnt[--A[i]] > 1) return 0; FOR(i, 0, N-1) if (A[i] < N) { FOR(j, 0, N-1) if (A[(i+j)%N] < N && A[(i+j)%N] != (A[i]+j)%N) return 0; break; } return 1; } int replacement(int N, int *A, int *ans) { int start = 0; FOR(i, 0, N-1) if (A[i]-- < 2) start = i; vt<int> B(N); FOR(i, 0, N-1) B[(start+i)%N] = i; vt<int> ord(N); iota(all(ord), 0); sort(all(ord), [&](const int &a, const int &b) { return A[a] < A[b]; }); vt<int> res; FOR(ii, 0, N-1) { int i = ord[ii]; if (A[i] < N) continue; res.push_back(B[i]); B[i] = N - 1 + size(res); assert(B[i] <= A[i]); for (; B[i] < A[i]; B[i]++) res.push_back(B[i]); } FOR(i, 0, size(res)-1) ans[i] = res[i] + 1; return size(res); } constexpr int MOD = 1e9 + 9; int binpow(int a, int b) { int ret = 1; for (; b; b >>= 1, a = 1ll * a * a % MOD) if (b & 1) ret = 1ll * ret * a % MOD; return ret; } int countReplacement(int N, int *A) { if (!valid(N, A)) return 0; sort(A, A+N); int ans = 1; FOR(i, 0, N-1) if (A[i] >= N) { #ifdef DEBUG cout << "bruh: " << binpow(N - i, A[i] - (i ? max(N-1, A[i-1])+1 : N)) << ' ' << A[i] << ' ' << A[i-1] << '\n'; #endif ans = 1ll * ans * binpow(N - i, A[i] - (i ? max(N-1, A[i-1])+1 : N)) % MOD; } return 1ll * ans * (A[0] >= N ? N : 1) % MOD; }
#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...