#include "gondola.h"
#include <bits/stdc++.h>
using namespace std;
#define mod 1000000009
int valid(int n,int inputSeq[]){
int offset=-1;
set<int> s;
for(int i=0;i<n;++i){
if(s.find(inputSeq[i])!=s.end())return 0;
s.insert(inputSeq[i]);
if(inputSeq[i]<=n){
if(offset==-1)offset=(inputSeq[i]-i-1+n)%n;
else if(offset!=(inputSeq[i]-i-1+n)%n)return 0;
}
}
return 1;
}
//----------------------
int replacement(int n, int gondolaSeq[], int replacementSeq[]){
set<int> changed;
map<int,int> pos;
int offset=0,dummy=0,cur=0;
int mx=0;
for(int i=0;i<n;++i){
if(gondolaSeq[i]<=n)offset=(gondolaSeq[i]-1-i+n)%n;
else{
changed.insert(gondolaSeq[i]);
if(gondolaSeq[i]>gondolaSeq[dummy])dummy=i;
}
mx=max(mx,gondolaSeq[i]);
}
for(int i=0;i<n;++i){
if(gondolaSeq[i]>n){
pos[gondolaSeq[i]]=((i+offset)%n)+1;
}
}
cur=(dummy+offset)%n+1;
int ori=cur;
for(int i=n+1;i<=mx;++i){
if(changed.find(i)==changed.end()||pos[i]==ori){
replacementSeq[i-n-1]=cur;
cur=i;
}
else{
replacementSeq[i-n-1]=pos[i];
}
}
return mx-n;
}
//----------------------
int fp(int x,int a){
if(a==0)return 1;
int t=fp(x,a/2);
long long r=((long long)t*t)%mod;
if(a%2)r=(r*x)%mod;
return (int)r;
}
int countReplacement(int n, int inputSeq[]){
set<int> changed;
int mx=0;
for(int i=0;i<n;++i){
if(inputSeq[i]>n){
changed.insert(inputSeq[i]);
mx=max(mx,inputSeq[i]);
}
}
long long ans=valid(n,inputSeq);
if(changed.size()==n)ans*=n;
if(changed.size()==0)return (int)ans;
int num=1;
int pv=*(--changed.end());
changed.erase(--changed.end());
while(!changed.empty()){
int x=*(--changed.end());
changed.erase(--changed.end());
ans=(ans*fp(num,pv-x-1))%mod;
pv=x;
++num;
}
ans=(ans*fp(num,pv-n-1))%mod;
return (int)ans;
}
Compilation message
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:75:19: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
75 | if(changed.size()==n)ans*=n;
| ~~~~~~~~~~~~~~^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
308 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
12 ms |
2260 KB |
Output is correct |
7 |
Correct |
7 ms |
704 KB |
Output is correct |
8 |
Correct |
20 ms |
4052 KB |
Output is correct |
9 |
Correct |
7 ms |
1492 KB |
Output is correct |
10 |
Correct |
29 ms |
4604 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
300 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
14 ms |
2260 KB |
Output is correct |
7 |
Correct |
8 ms |
852 KB |
Output is correct |
8 |
Correct |
21 ms |
4036 KB |
Output is correct |
9 |
Correct |
7 ms |
1596 KB |
Output is correct |
10 |
Correct |
28 ms |
4564 KB |
Output is correct |
11 |
Correct |
0 ms |
212 KB |
Output is correct |
12 |
Correct |
1 ms |
212 KB |
Output is correct |
13 |
Correct |
3 ms |
468 KB |
Output is correct |
14 |
Correct |
1 ms |
212 KB |
Output is correct |
15 |
Correct |
7 ms |
724 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
308 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
212 KB |
Output is correct |
7 |
Correct |
1 ms |
340 KB |
Output is correct |
8 |
Correct |
1 ms |
340 KB |
Output is correct |
9 |
Correct |
1 ms |
340 KB |
Output is correct |
10 |
Correct |
1 ms |
340 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
304 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
308 KB |
Output is correct |
6 |
Correct |
1 ms |
312 KB |
Output is correct |
7 |
Correct |
1 ms |
340 KB |
Output is correct |
8 |
Correct |
1 ms |
340 KB |
Output is correct |
9 |
Correct |
1 ms |
340 KB |
Output is correct |
10 |
Correct |
1 ms |
340 KB |
Output is correct |
11 |
Correct |
7 ms |
724 KB |
Output is correct |
12 |
Correct |
7 ms |
724 KB |
Output is correct |
13 |
Correct |
29 ms |
4056 KB |
Output is correct |
14 |
Correct |
6 ms |
700 KB |
Output is correct |
15 |
Correct |
36 ms |
3696 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
264 KB |
Output is correct |
4 |
Correct |
1 ms |
212 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
384 KB |
Output is correct |
7 |
Correct |
1 ms |
212 KB |
Output is correct |
8 |
Correct |
0 ms |
212 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
0 ms |
212 KB |
Output is correct |
7 |
Correct |
1 ms |
304 KB |
Output is correct |
8 |
Correct |
0 ms |
212 KB |
Output is correct |
9 |
Correct |
47 ms |
6728 KB |
Output is correct |
10 |
Correct |
37 ms |
5512 KB |
Output is correct |
11 |
Correct |
13 ms |
2516 KB |
Output is correct |
12 |
Correct |
16 ms |
3020 KB |
Output is correct |
13 |
Correct |
4 ms |
980 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
1 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
6 |
Correct |
0 ms |
212 KB |
Output is correct |
7 |
Correct |
0 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
212 KB |
Output is correct |
9 |
Correct |
49 ms |
6860 KB |
Output is correct |
10 |
Correct |
38 ms |
5592 KB |
Output is correct |
11 |
Correct |
13 ms |
2516 KB |
Output is correct |
12 |
Correct |
17 ms |
3068 KB |
Output is correct |
13 |
Correct |
3 ms |
852 KB |
Output is correct |
14 |
Correct |
63 ms |
9296 KB |
Output is correct |
15 |
Correct |
70 ms |
10440 KB |
Output is correct |
16 |
Correct |
10 ms |
2132 KB |
Output is correct |
17 |
Correct |
45 ms |
7140 KB |
Output is correct |
18 |
Correct |
23 ms |
4172 KB |
Output is correct |