Submission #731210

#TimeUsernameProblemLanguageResultExecution timeMemory
731210senthetaGondola (IOI14_gondola)C++17
100 / 100
70 ms6024 KiB
#include "gondola.h" // author : sentheta aka vanwij #include<iostream> #include<iomanip> #include<algorithm> #include<cassert> #include<random> #include<chrono> #include<cmath> #include<string> #include<vector> #include<bitset> #include<queue> #include<stack> #include<map> #include<set> using namespace std; #define Int long long #define V vector #define pii pair<int,int> #define ff first #define ss second mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); #define pow2(x) (1LL<<(x)) #define msb(x) (63-__builtin_clzll(x)) #define bitcnt(x) (__builtin_popcountll(x)) #define nl '\n' #define _ << ' ' << #define all(x) (x).begin(), (x).end() #define rep(i,a,b) for(int i = (int)(a); i < (int)(b); i++) #define dbg(x) if(1) cout << "?" << #x << " : " << (x) << endl << flush; int valid(int n,int a[]){ int bgn=-1; bool ok = 1; set<int> s; rep(i,0,n){ if(a[i]<=n){ if(bgn==-1) bgn = i; int k = i-bgn; ok &= (a[bgn]+k - a[i])%n==0; } ok &= 0<a[i]; ok &= !s.count(a[i]); s.insert(a[i]); } return ok; } //---------------------- int replacement(int n,int a[],int ans[]){ map<int,int> mp; int bgn = 0; rep(i,0,n) if(a[i] <= n){ bgn = i; break; } // dbg(bgn); rep(i,0,n) if(a[i] > n){ int ori = (i-bgn + a[bgn] -1 + n)%n+1; // dbg(ori); mp[a[i]] = ori; } int l=n+1, sz=0; for(auto[r,i] : mp){ ans[sz++] = i; while(l < r){ ans[sz++] = l++; } l = r+1; } return sz; } //---------------------- const Int MOD = 1000000009; Int bpow(Int a,Int b){ Int ret = 1; while(b){ if(b&1) ret = ret*a%MOD; a = a*a%MOD; b /= 2; } return ret; } int countReplacement(int n,int a[]){ if(!valid(n,a)) return 0; Int ans = 1; bool smol = 0; set<int> s; rep(i,0,n){ if(a[i] > n){ s.insert(a[i]); } smol |= a[i]<=n; } if(!smol){ ans = n; } int l = n+1, chc = s.size(); for(int r : s){ ans *= bpow(chc, r-l)%MOD; ans %= MOD; chc--; l = r+1; } assert(0<ans && ans<MOD); if((int)s.size() <= 1) assert(ans==1); ans = (ans%MOD+MOD)%MOD; return (int)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...