Submission #306800

#TimeUsernameProblemLanguageResultExecution timeMemory
306800vipghn2003Gondola (IOI14_gondola)C++14
35 / 100
24 ms3064 KiB
#include "gondola.h" #include<bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair using namespace std; const int mod=1e9+7; const int N=1e5+5; int Power(int x,int n) { if(!n) return 1; if(n%2) return 1ll*Power(x,n-1)*x%mod; int tmp=Power(x,n/2); return 1ll*tmp*tmp%mod; } int expect[N*2],initSeq[N]; int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int offs = 0; int dummy = 0; int mx = -1; memset(expect, -1, sizeof(expect)); for(int i = 0; i < n; i++){ if(gondolaSeq[i] <= n) offs = (n+i-gondolaSeq[i]+1) % n; else expect[gondolaSeq[i]] = i; if(gondolaSeq[i] > mx){ mx = gondolaSeq[i]; dummy = i; } } for(int i = 0; i < n; i++){ initSeq[(i+offs) % n] = i+1; } int rpidx = 0; for(int i = n+1; i <= mx; i++){ if(expect[i] == -1){ replacementSeq[rpidx++] = initSeq[dummy]; initSeq[dummy] = i; }else{ replacementSeq[rpidx++] = initSeq[expect[i]]; initSeq[expect[i]] = i; } } return rpidx; } int countReplacement(int n,int inputSeq[]) { vector<int>b(n); for(int i=0;i<n;i++) inputSeq[i]--; int res=0; for(int i=0;i<n;i++) { int cnt=i; bool kt=true; vector<int>cur; for(int j=0;j<n;j++) { if(cnt>=n) cnt=0; b[j]=cnt; cnt++; if(b[j]>inputSeq[j]) kt=false; else { if(inputSeq[j]>(n-1)) cur.push_back(inputSeq[j]-n+1); } } if(!kt) continue; sort(cur.begin(),cur.end()); int sz=cur.size(); int val=Power(sz,cur[0]-1); for(int j=1;j<sz;j++) { if(cur[j]==cur[j-1]) { val=0; break; } val=1ll*val*Power(sz-j,cur[j]-cur[j-1]-1)%mod; } res=(res+val)%mod; } return res; } int valid(int n,int inputSeq[]) { return countReplacement(n,inputSeq)!=0; } /* int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n; cin>>n; int a[n]; for(int i=0;i<n;i++) cin>>a[i]; cout<<countReplacement(n,a); }*/
#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...