제출 #1229094

#제출 시각아이디문제언어결과실행 시간메모리
1229094AMel0n곤돌라 (IOI14_gondola)C++20
100 / 100
30 ms5464 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define FOR(i,N) for(ll i = 0; i < N; i++) #define all(x) (x).begin(), (x).end() #define F first #define S second #include "gondola.h" const ll MOD = 1000000009ll; int valid(int n, int seq[]) { unordered_set<int> seen; pair<int,int> pr = {-1,-1}; FOR(i, n) { if (seen.find(seq[i]) != seen.end()) return 0; seen.insert(seq[i]); if (seq[i] <= n) { if (pr.F != -1) { if (pr.F <= seq[i]) { if (seq[i]-pr.F != i-pr.S) return 0; } else { if (pr.F-seq[i] != n-(i-pr.S)) return 0; } } pr = {seq[i], i}; } } return 1; } int replacement(int n, int gSeq[], int replacementSeq[]) { int mi = min_element(gSeq, gSeq+n) - gSeq; int mn = *min_element(gSeq, gSeq+n); if (mn > n) {mn = 1; mi = 0;} mi = (mi + n-mn+1) % n; // gondola 1 idx priority_queue<pair<ll,ll>> pq; FOR(i, n) if (gSeq[i] > n) pq.push({-gSeq[i], (i >= mi ? i-mi+1 : n-(mi-i)+1)}); int repi = 0; int pr = n; while(pq.size()) { auto [cur, og] = pq.top(); cur = -cur; pq.pop(); replacementSeq[repi++] = og; for(int rep = pr+1; rep < cur; rep++) replacementSeq[repi++] = rep; pr = cur; } return repi; } ll binExpo(ll a, ll b) { if (b == 0) return 1; if (b % 2) { ll temp = binExpo(a, (b-1)/2); return (((a * temp) % MOD) * temp) % MOD; } ll temp = binExpo(a, b/2); return (temp * temp) % MOD; } int countReplacement(int n, int seq[]) { if (!valid(n, seq)) return 0; ll r = 0, res = 1, pr = n+1; priority_queue<ll> pq; FOR(i, n) if (seq[i] > n) {pq.push(-seq[i]); r++;} if (r == n) res = n; while (pq.size()){ ll cur = -pq.top(); pq.pop(); res = (res * (binExpo(r, cur-pr)) % MOD) % MOD; pr = cur+1; r--; } 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...