제출 #782337

#제출 시각아이디문제언어결과실행 시간메모리
782337sofija6곤돌라 (IOI14_gondola)C++14
60 / 100
30 ms4688 KiB
#include <bits/stdc++.h> #include "gondola.h" #define MAXN 250010 #define MOD 1000000009 using namespace std; int x; int valid(int n, int inputSeq[]) { int pos=-1,cnt=n,cur; set<int> s; for (int i=0;i<n;i++) { if (s.count(inputSeq[i])) return 0; s.insert(inputSeq[i]); if (inputSeq[i]<=n) pos=i; } if (pos==-1) { x=1; return 1; } cur=inputSeq[pos]; while (cnt--) { if (inputSeq[pos]<=n && inputSeq[pos]!=cur) return 0; cur++; pos++; if (pos>=n) pos=0; if (cur>n) cur=1; } return 1; } int Calc(long long n,long long k) { long long a[70]; a[0]=n; for (int i=1;i<61;i++) a[i]=(a[i-1]*a[i-1])%MOD; long long ans=1,cur=59; while (k) { if ((1ll<<cur)<=k) { k-=(1ll<<cur); ans=(ans*a[cur])%MOD; } cur--; } return (int)ans; } int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int maxx=n,fixed[MAXN]={0},pos=0,realval[MAXN],s=-1; for (int i=1;i<=n;i++) realval[i]=i; for (int i=0;i<n;i++) { if (gondolaSeq[i]>n) fixed[gondolaSeq[i]]=i+1; else s=i+1; if (gondolaSeq[i]>maxx) { maxx=max(maxx,gondolaSeq[i]); pos=i+1; } } if (s!=-1) { int cur=gondolaSeq[s-1],cnt=n; while (cnt--) { realval[s]=cur; s++; cur++; if (s>n) s=1; if (cur>n) cur=1; } } int lastt=realval[pos]; for (int i=n+1;i<=maxx;i++) { if (fixed[i]) replacementSeq[i-n-1]=fixed[i]==pos?lastt : realval[fixed[i]]; else { replacementSeq[i-n-1]=lastt; lastt=i; } } return maxx-n; } int countReplacement(int n, int inputSeq[]) { set<int> s; for (int i=0;i<n;i++) { if (inputSeq[i]>n) s.insert(inputSeq[i]); } if (!valid(n,inputSeq)) return 0; long long ans=1; int prev=n+1,num=s.size(); for (auto i : s) { if (i-prev>0) ans=(ans*Calc(num,i-prev))%MOD; prev=i; num--; } if (x) { for (int i=1;i<=n;i++) ans=(ans*i)%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...