제출 #579893

#제출 시각아이디문제언어결과실행 시간메모리
5798931ne곤돌라 (IOI14_gondola)C++14
60 / 100
55 ms9988 KiB
#include<bits/stdc++.h> using namespace std; #include "gondola.h" int valid(int n, int inputSeq[]) { int index = -1; for (int i = 0;i<n;++i){ if (inputSeq[i] <=n){ index = i; } } map<int,int>visited; if (index == -1){ for (int i = 0;i<n;++i){ int x = inputSeq[i]; if (visited[x])return 0; visited[x] = true; } return 1; } for (int i = 0;i<n;++i){ int j = (i + index)%n; int temp = inputSeq[index] + i; if (temp > n)temp = temp % n; if (visited[temp] || visited[inputSeq[j]])return 0; visited[temp] = true; visited[inputSeq[j]] = true; } return 1; } //---------------------- int replacement(int n, int gondolaSeq[], int replacementSeq[]) { int index = -1; int maxxy = 1; for (int i = 0;i<n;++i){ if (gondolaSeq[i] <=n){ index = i; } maxxy = max(gondolaSeq[i],maxxy); } map<int,int>visited; int init = 1; if (index == -1){ index = 0; } else init = gondolaSeq[index]; int extra = n + 1; for (int i = 0;i<n;++i){ visited[gondolaSeq[i]] = i + 1; } int cur = 0; for (int i = 0;i<n;){ int j = (i + index)%n; int temp = init + i; if (temp > n)temp = temp % n; if (gondolaSeq[j] == temp){ ++i; continue; } if (gondolaSeq[j] < extra){ ++i; continue; } vector<int>pos; while(!visited[extra]){ pos.push_back(extra); extra++; } if (visited[extra] && extra!=gondolaSeq[j]){ int temp2 = visited[extra] - index - 1; if (temp2 <= 0)temp2+=n; temp2 = init + temp2; if (temp2 > n)temp2 = temp2 % n; replacementSeq[cur++] = temp2; for (auto x:pos){ replacementSeq[cur++] = x; } extra++; } else{ replacementSeq[cur++] = temp; for (auto x:pos){ replacementSeq[cur++] = x; } extra++; ++i; } } return cur; } //---------------------- int countReplacement(int n, int inputSeq[]) { if (!valid(n,inputSeq))return 0; int index = -1; for (int i = 0;i<n;++i){ if (inputSeq[i] <=n){ index = i; } } const int mod = 1e9 + 9; sort(inputSeq,inputSeq + n); long long ans = 1; long long prev = n; for (int i = 0;i<n;++i){ if (inputSeq[i] > n){ ans = (ans * max(1LL,(n - i) * (inputSeq[i] - prev - 1))%mod)%mod; prev = inputSeq[i]; } } if (index == -1)ans = ans * n; return 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...