This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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(0LL,(n - i) * (inputSeq[i] - prev - 1))%mod)%mod;
prev = inputSeq[i];
}
}
if (index == -1)ans = ans * n;
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |