제출 #582291

#제출 시각아이디문제언어결과실행 시간메모리
582291jasmin곤돌라 (IOI14_gondola)C++14
90 / 100
1086 ms115628 KiB
#include<bits/stdc++.h> #include<gondola.h> using namespace std; const int inf=1e9+9; const int mod=1e9+9; vector<int> reorder(int n, int s[]){ int small=inf; int ind=-1; for(int i=0; i<n; i++){ if(s[i]<small){ small=s[i]; ind=i; } } if(n<small){ vector<int> ans(n); for(int i=0; i<n; i++){ ans[i]=s[i]; } return ans; } int start=(n+ind-(small-1))%n; vector<int> ans(n); for(int i=0; i<n; i++){ ans[i]=s[(start+i)%n]; } return ans; } int valid(int n, int inputSeq[]){ vector<int> s=reorder(n, inputSeq); set<int> used; for(int i=0; i<n; i++){ if(s[i]!=i+1){ if(s[i]<=n || used.find(s[i])!=used.end()){ return false; } used.insert(s[i]); } } return true; } int maximum(vector<int>& s){ int ans=-1; for(auto e: s){ ans=max(ans, e); } return ans; } int replacement(int n, int gondolaSeq[], int ans[]){ vector<int> s=reorder(n, gondolaSeq); int size=maximum(s)-n; for(int i=0; i<size; i++){ ans[i]=-1; } set<int> usable; for(int i=0; i<n; i++){ if(s[i]>n){ ans[s[i]-n-1]=i; usable.insert(i); } } iota(s.begin(), s.end(), 1); for(int i=0; i<size; i++){ if(ans[i]==-1){ int ind=*usable.begin(); ans[i]=s[ind]; s[ind]=n+i+1; } else{ int ind=ans[i]; usable.erase(ind); ans[i]=s[ind]; s[ind]=n+i+1; } } return size; } int minimum(vector<int>& s){ int ans=inf; for(auto e: s){ ans=min(ans, e); } return ans; } int countReplacement(int n, int inputSeq[]){ if(!valid(n, inputSeq)) return 0; vector<int> s=reorder(n, inputSeq); int size=maximum(s)-n; vector<bool> def(size, false); long long ans=1ll; int usable=0; for(int i=0; i<n; i++){ if(s[i]>n){ usable++; def[s[i]-n-1]=true; } } for(int i=0; i<size; i++){ if(def[i]){ usable--; } else{ ans*=usable; ans%=mod; } } if(minimum(s)>n){ ans*=n; ans%=mod; } return ans; } /*signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n; cin >> n; int s[n]; for(int i=0; i<n; i++){ cin >> s[i]; } cout << valid(n, s) << "\n"; int rep[n*3]; int size=replacement(n, s, rep); cout << size << "\n"; for(auto e: rep){ cout << e << " "; } cout << "\n"; cout << countReplacement(n, s) << "\n"; }*/
#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...