제출 #1264875

#제출 시각아이디문제언어결과실행 시간메모리
1264875ortsacGondola (IOI14_gondola)C++17
75 / 100
32 ms5444 KiB
#include "gondola.h" #include <bits/stdc++.h> using namespace std; int isValid(int n, deque<int> v) { set<int> s; for (auto u : v) s.insert(u); if (((int) s.size()) < n) return 0; int x = *min_element(v.begin(), v.end()); if (x > n) return 1; while (v.front() != x) { v.push_front(v.back()); v.pop_back(); } int curr = x; for (int i = 1; i < n; i++) { if (v[i] > n) continue; if (v[i] != (x + i)) return 0; } return 1; } int valid(int n, int inputSeq[]) { deque<int> v(n); for (int i = 0; i < n; i++) v[i] = inputSeq[i]; return isValid(n, v); } //---------------------- #define pii pair<int, int> #define fr first #define se second int replacement(int n, int gondolaSeq[], int replacementSeq[]) { deque<int> v(n); for (int i = 0; i < n; i++) v[i] = gondolaSeq[i]; int po = (min_element(v.begin(), v.end()) - v.begin()); int x = v[po]; if (x <= n) { int qtd = (x - po - 1)%n; qtd = ((qtd + n)%n); while (qtd--) { v.push_front(v.back()); v.pop_back(); } } // ok now calc vector<pii> ord; for (int i = 0; i < n; i++) { if (v[i] > n) ord.push_back({v[i], i}); } sort(ord.begin(), ord.end()); vector<int> rep; int curr = n; for (auto u : ord) { int a = (u.se + 1); while (curr != u.fr) { rep.push_back(a); curr++; a = curr; } } for (int i = 0; i < ((int) rep.size()); i++) replacementSeq[i] = rep[i]; return rep.size(); } //---------------------- #define int long long const int MOD = (1e9 + 9); int mult(int a, int b) { return (((a % MOD) * (b % MOD)) % MOD); } int binpow(int a, int b) { if (b == 0) return 1; int c = binpow(a, b/2); c = mult(c, c); if (b % 2) return mult(a, c); else return c; } int32_t countReplacement(int32_t n, int32_t inputSeq[]) { deque<int32_t> v(n); for (int i = 0; i < n; i++) v[i] = inputSeq[i]; if (!isValid(n, v)) return 0; int waiting = 0; // ok now calc vector<int> over; for (int i = 0; i < n; i++) if (v[i] > n) { waiting++; over.push_back(v[i]); } sort(over.begin(), over.end()); int ans = 1; int curr = n; for (auto u : over) { ans = mult(ans, binpow(waiting, u - curr - 1)); waiting--; curr = u; } return ans; }
#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...