Submission #55251

#TimeUsernameProblemLanguageResultExecution timeMemory
55251Just_Solve_The_ProblemGondola (IOI14_gondola)C++11
100 / 100
29 ms6268 KiB
#include <bits/stdc++.h> #include "gondola.h" //#include "grader.cpp" using namespace std; #define pb push_back #define pii pair < int, int > #define fr first #define sc second #define mk make_pair #define all(s) s.begin(), s.end() #define sz(s) (int)s.size() #define ll long long const int N = (int)3e5 + 7; int valid(int n, int inputSeq[]) { int cnt = 1, start = -1; for (int i = 0; i < n; i++) { if (inputSeq[i] == cnt) { start = i; break; } } for (int i = start; i < n; i++) { if (inputSeq[i] != cnt) { return 0; } cnt++; } for (int i = 0; i < start; i++) { if (inputSeq[i] != cnt) { return 0; } cnt++; } return 1; } //---------------------- int has[N], pos[N]; int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int start = -1, mx = -1; memset(pos, -1, sizeof pos); for (int i = 0; i < n; i++) { has[gondolaSeq[i]] = 1; pos[gondolaSeq[i]] = i; mx = max(mx, gondolaSeq[i]); if (gondolaSeq[i] <= n) { if (start != -1) continue; start = i - gondolaSeq[i] + 1; if (start < 0) start += n; } } deque < int > ans, dq; if (start == -1) start = 0; for (int i = n + 1; i <= mx; i++) { if (has[i]) { int qwe = pos[i]; qwe -= start; if (qwe < 0) qwe += n; qwe++; ans.pb(qwe); while (!dq.empty()) { ans.pb(dq.front()); dq.pop_front(); } dq.clear(); } else { dq.pb(i); } } int i = 0; for (int to : ans) { replacementSeq[i++] = to; } return i; } //---------------------- int mod = (int)1e9 + 9; int mult(ll a, ll b) { return (a * b) % mod; } ll binpow(ll a, ll n) { ll res = 1; while (n) { if (n & 1) { res = mult(res, a); } a = mult(a, a); n >>= 1; } return res; } int countReplacement(int n, int inputSeq[]) { int res = 1; sort(inputSeq, inputSeq + n); for (int i = 0; i < n; i++) { if (inputSeq[i] <= n) continue; if (!i) { res = mult(res, binpow(n, inputSeq[i] - n - 1)); } else { res = mult(res, binpow(n - i, inputSeq[i] - max(inputSeq[i - 1], n) - 1)); } } if (inputSeq[0] > n) { res = mult(res, n); } 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...