Submission #430370

#TimeUsernameProblemLanguageResultExecution timeMemory
430370frodakcinGondola (IOI14_gondola)C++11
100 / 100
86 ms5956 KiB
#include "gondola.h" #include <cstdio> #include <cassert> #include <map> #include <algorithm> int valid(int n, int inputSeq[]) { std::map<int, int> map; for(int i=0;i<n;++i) { int x=inputSeq[i]-1; if(map.find(x) != map.end()) return 0; map.insert({x, i}); } for(int i=0;i<n;++i) if(map.find(i)!=map.end() && map.find((i+1)%n)!=map.end()) { int u=map[i], v=map[(i+1)%n]; if(v != (u+1)%n) return 0; } return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]) { for(int i=0;i<n;++i) if(gondolaSeq[i] <= n && gondolaSeq[i] != i+1) { std::rotate(gondolaSeq, gondolaSeq+(i-gondolaSeq[i]+1+n)%n, gondolaSeq+n); } std::map<int, int> map; for(int i=0;i<n;++i) { int x=gondolaSeq[i]; assert(map.find(x) == map.end()); map.insert({x, i}); } int l=0, v=n; for(auto x:map) for(int t=x.second+1;v<x.first;) replacementSeq[l++]=t, t=++v; return l; } //---------------------- using ll = long long; const int MOD = 1e9+9; struct mint { public: int v; mint(int _v=0): v(_v) { if(v < -MOD || MOD <= v) v%=MOD; if(v<0) v+=MOD; } mint& operator += (const mint& o) {if((v+=o.v)>=MOD) v-=MOD; return *this;} mint& operator -= (const mint& o) {if((v-=o.v)<0) v+=MOD;return *this;} mint& operator *= (const mint& o) {v=(ll)v*o.v%MOD; return *this;} friend mint operator + (mint a, const mint& b) {return a+=b;} friend mint operator - (mint a, const mint& b) {return a-=b;} friend mint operator * (mint a, const mint& b) {return a*=b;} template<typename T> friend mint pow(mint b, T p) { mint f(1); for(;p;p>>=1, b*=b) if(p&1) f*=b; return f; } }; int countReplacement(int n, int inputSeq[]) { if(!valid(n, inputSeq)) return 0; std::sort(inputSeq, inputSeq+n); mint ans(1); if(inputSeq[0] > n) ans *= mint(n); int v=n; for(int i=0;i<n;++i) { if(v < inputSeq[i]) ans *= pow(mint(n-i), inputSeq[i]-v-1), v=inputSeq[i]; } return ans.v; }
#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...