Submission #1278849

#TimeUsernameProblemLanguageResultExecution timeMemory
1278849stanwaibbangeGondola (IOI14_gondola)C++20
100 / 100
28 ms6100 KiB
#include <bits/stdc++.h> using namespace std; #include "gondola.h" using ll = long long; const int INF = numeric_limits<int>::max() / 2; int valid(int n, int inputSeq[]) { int minv = INF; int index = -1; for (int i = 0; i < n; ++i) { if (inputSeq[i] <= 0) { return 0; } if (inputSeq[i] <= n) { minv = inputSeq[i] - i; index = i; break; } } for (int i = index + 1; i < n; ++i) { if (inputSeq[i] <= 0) { return 0; } if (inputSeq[i] <= n) { if (inputSeq[i]%n != (minv + i)%n) { return 0; } } } sort(inputSeq,inputSeq+n); int last = -1; for (int i = 0; i < n; ++i) { if (inputSeq[i] == last) { return 0; } last = inputSeq[i]; } return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int minv = 1; int index = -1; int l = 0; map<int,int> m{}; for (int i = 0; i < n; ++i) { m[gondolaSeq[i]] = i; // if (gondolaSeq[i] <= n) // { // minv = gondolaSeq[i] - i; // index = i; // break; // } } for (auto p : m) { if (p.first <= n) { minv = (p.first - p.second + n)%n; } break; } int rep = n+1; for (auto p : m) { if (p.first <= n) { continue; } int r = (minv + p.second + n)%n; if (r==0) { r = n; } while (r < p.first) { replacementSeq[l] = r; ++l; r = rep; ++rep; } } return l; } //---------------------- int M = 1000000009; ll exp(ll a, ll b) { if (b==0) { return 1; } if (b==1) { return a; } ll half = exp(a,b/2); if (b%2==0){ return (half*half)%M; } else { return (((half*half)%M)*a)%M; } } int countReplacement(int n, int inputSeq[]) { if (!(valid(n,inputSeq))) { return 0; } int minv = 1; int index = -1; int l = 0; map<int,int> m{}; for (int i = 0; i < n; ++i) { m[inputSeq[i]] = i; // if (gondolaSeq[i] <= n) // { // minv = gondolaSeq[i] - i; // index = i; // break; // } } ll out = 1; for (auto p : m) { if (p.first <= n) { minv = (p.first - p.second + n)%n; break; } out=n; break; } ll last = n; ll broken = n; for (auto p : m) { if (p.first <= n) { --broken; continue; } out = (out * exp(broken,(p.first-last-1)))%M; last = p.first; --broken; } return out; }
#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...