제출 #118066

#제출 시각아이디문제언어결과실행 시간메모리
118066dragonslayerit곤돌라 (IOI14_gondola)C++14
55 / 100
40 ms4600 KiB
#include "gondola.h" #include <set> #include <vector> #include <algorithm> #include <cstdio> int valid(int n, int inputSeq[]) { int shift=-1; std::set<int> used; for(int i=0;i<n;i++){ if(used.count(inputSeq[i])) return 0; used.insert(inputSeq[i]); if(inputSeq[i]<=n){ int new_shift=(inputSeq[i]-i+n)%n; if(shift!=-1&&shift!=new_shift) return 0; shift=new_shift; } } return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]) { for(int i=0;i<n;i++){ gondolaSeq[i]--; } int shift=0; for(int i=0;i<n;i++){ if(gondolaSeq[i]<n){ shift=(gondolaSeq[i]-i+n)%n; break; } } std::vector<int> seq(n); for(int i=0;i<n;i++){ seq[i]=(i+shift)%n; } /* for(int i=0;i<n;i++){ printf("given: %d\n",gondolaSeq[i]); } for(int i=0;i<n;i++){ printf("seq: %d\n",seq[i]); } */ auto max=std::max_element(gondolaSeq,gondolaSeq+n); std::vector<int> where(*max+1,max-gondolaSeq); for(int i=0;i<n;i++){ where[gondolaSeq[i]]=i; } for(int x=n;x<=*max;x++){ //printf("where[%d]=%d: %d\n",x,where[x],seq[where[x]]); replacementSeq[x-n]=seq[where[x]]; seq[where[x]]=x; } int l=*max+1-n; for(int i=0;i<l;i++){ replacementSeq[i]++; } return l; } //---------------------- int countReplacement(int n, int inputSeq[]) { return -3; }
#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...