#include "gondola.h"
#include <cmath>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
bool mark[300100];
int valid(int n, int inputSeq[])
{
int key=-1;
int id=-1;
int cur;
for (int i=0;i<n;i++) {
inputSeq[i]--;
if (mark[inputSeq[i]]) return 0;
mark[inputSeq[i]]=true;
}
for (int i=0;i<n;i++) {
if (inputSeq[i]>=n) continue;
key=inputSeq[i];
id=i;
}
for (int i=0;i<n;i++) {
if (inputSeq[i]>=n) continue;
cur=key+i-id;
cur%=n;
cur+=n;
cur%=n;
if (inputSeq[i]!=cur) return 0;
}
return 1;
}
//----------------------
int init[100100];
int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
int id=0;
int key=1;
for (int i=0;i<n;i++) {
if (gondolaSeq[i]>n) continue;
id=i;
key=gondolaSeq[i];
break;
}
init[id]=key;
for (int i=id+1;i<n;i++) {
init[i]=init[i-1]+1;
if (init[i]>n) init[i]-=n;
}
for (int i=id-1;i>=0;i--) {
init[i]=init[i+1]-1;
if (init[i]<=0) init[i]+=n;
}
vector<pair<int,int>> ei;
for (int i=0;i<n;i++) {
if (gondolaSeq[i]<=n) continue;
ei.push_back({gondolaSeq[i],i});
}
sort(ei.begin(),ei.end());
int sz=0;
int curid=0;
int curcar=n+1;
int curgon=0;
for (int i=0;i<(int)ei.size();i++) {
while (curcar<ei[i].first) {
while (init[curgon]==gondolaSeq[curgon]) curgon++;
replacementSeq[sz++]=init[curgon];
init[curgon]=curcar;
curcar++;
}
replacementSeq[sz++]=init[ei[i].second];
init[ei[i].second]=ei[i].first;
curcar++;
}
return sz;
}
//----------------------
//
int mod=1000000009;
long long poww(long long b,int x) {
if (x==0) return 1;
if (x==1) return b;
long long tmp=poww(b,x/2);
tmp*=tmp;
tmp%=mod;
if (x%2) return (tmp*b)%mod;
return tmp;
}
int countReplacement(int n, int inputSeq[])
{
if (!valid(n,inputSeq)) return 0;
for (int i=0;i<n;i++) inputSeq[i]++;
int id=0;
int key=1;
for (int i=0;i<n;i++) {
if (inputSeq[i]>n) continue;
id=i;
key=inputSeq[i];
break;
}
init[id]=key;
for (int i=id+1;i<n;i++) {
init[i]=init[i-1]+1;
if (init[i]>n) init[i]-=n;
}
for (int i=id-1;i>=0;i--) {
init[i]=init[i+1]-1;
if (init[i]<=0) init[i]+=n;
}
vector<pair<int,int>> ei;
for (int i=0;i<n;i++) {
if (inputSeq[i]<=n) continue;
ei.push_back({inputSeq[i],i});
}
sort(ei.begin(),ei.end());
int curcar=n+1;
int cnt=ei.size();
if (cnt==n) return n;
long long ans=1;
for (int i=0;i<(int)ei.size();i++) {
ans*=poww(cnt,ei[i].first-curcar);
ans%=mod;
curcar=ei[i].first+1;
cnt--;
}
return ans;
}
Compilation message
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:69:6: warning: unused variable 'curid' [-Wunused-variable]
int curid=0;
^~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
252 KB |
Output is correct |
2 |
Correct |
2 ms |
356 KB |
Output is correct |
3 |
Correct |
2 ms |
392 KB |
Output is correct |
4 |
Correct |
2 ms |
468 KB |
Output is correct |
5 |
Correct |
2 ms |
468 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
548 KB |
Output is correct |
2 |
Correct |
4 ms |
548 KB |
Output is correct |
3 |
Correct |
4 ms |
548 KB |
Output is correct |
4 |
Correct |
3 ms |
548 KB |
Output is correct |
5 |
Correct |
3 ms |
548 KB |
Output is correct |
6 |
Correct |
9 ms |
748 KB |
Output is correct |
7 |
Correct |
18 ms |
1004 KB |
Output is correct |
8 |
Correct |
13 ms |
1004 KB |
Output is correct |
9 |
Correct |
5 ms |
1004 KB |
Output is correct |
10 |
Correct |
18 ms |
1020 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
1020 KB |
Output is correct |
2 |
Correct |
2 ms |
1020 KB |
Output is correct |
3 |
Correct |
3 ms |
1020 KB |
Output is correct |
4 |
Correct |
2 ms |
1020 KB |
Output is correct |
5 |
Correct |
2 ms |
1020 KB |
Output is correct |
6 |
Correct |
7 ms |
1020 KB |
Output is correct |
7 |
Correct |
15 ms |
1020 KB |
Output is correct |
8 |
Correct |
13 ms |
1020 KB |
Output is correct |
9 |
Correct |
6 ms |
1020 KB |
Output is correct |
10 |
Correct |
15 ms |
1020 KB |
Output is correct |
11 |
Correct |
2 ms |
1020 KB |
Output is correct |
12 |
Correct |
3 ms |
1020 KB |
Output is correct |
13 |
Correct |
8 ms |
1020 KB |
Output is correct |
14 |
Correct |
2 ms |
1020 KB |
Output is correct |
15 |
Correct |
16 ms |
1020 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
1020 KB |
Output is correct |
2 |
Correct |
2 ms |
1020 KB |
Output is correct |
3 |
Correct |
2 ms |
1020 KB |
Output is correct |
4 |
Correct |
2 ms |
1020 KB |
Output is correct |
5 |
Correct |
2 ms |
1020 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
1020 KB |
Output is correct |
2 |
Correct |
3 ms |
1020 KB |
Output is correct |
3 |
Correct |
2 ms |
1020 KB |
Output is correct |
4 |
Correct |
3 ms |
1020 KB |
Output is correct |
5 |
Correct |
2 ms |
1020 KB |
Output is correct |
6 |
Correct |
3 ms |
1020 KB |
Output is correct |
7 |
Correct |
3 ms |
1020 KB |
Output is correct |
8 |
Correct |
3 ms |
1020 KB |
Output is correct |
9 |
Correct |
4 ms |
1020 KB |
Output is correct |
10 |
Correct |
3 ms |
1020 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
1020 KB |
Output is correct |
2 |
Correct |
2 ms |
1020 KB |
Output is correct |
3 |
Correct |
2 ms |
1020 KB |
Output is correct |
4 |
Correct |
4 ms |
1020 KB |
Output is correct |
5 |
Correct |
2 ms |
1020 KB |
Output is correct |
6 |
Correct |
3 ms |
1020 KB |
Output is correct |
7 |
Correct |
3 ms |
1020 KB |
Output is correct |
8 |
Correct |
3 ms |
1020 KB |
Output is correct |
9 |
Correct |
4 ms |
1020 KB |
Output is correct |
10 |
Correct |
3 ms |
1020 KB |
Output is correct |
11 |
Correct |
15 ms |
1216 KB |
Output is correct |
12 |
Correct |
16 ms |
1468 KB |
Output is correct |
13 |
Correct |
24 ms |
1728 KB |
Output is correct |
14 |
Correct |
13 ms |
1728 KB |
Output is correct |
15 |
Correct |
32 ms |
2600 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
2600 KB |
Output is correct |
2 |
Correct |
3 ms |
2600 KB |
Output is correct |
3 |
Correct |
3 ms |
2600 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
2600 KB |
Output is correct |
2 |
Correct |
2 ms |
2600 KB |
Output is correct |
3 |
Correct |
2 ms |
2600 KB |
Output is correct |
4 |
Correct |
3 ms |
2600 KB |
Output is correct |
5 |
Correct |
3 ms |
2600 KB |
Output is correct |
6 |
Correct |
3 ms |
2600 KB |
Output is correct |
7 |
Correct |
3 ms |
2600 KB |
Output is correct |
8 |
Correct |
2 ms |
2600 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
2600 KB |
Output is correct |
2 |
Correct |
2 ms |
2600 KB |
Output is correct |
3 |
Correct |
2 ms |
2600 KB |
Output is correct |
4 |
Correct |
3 ms |
2600 KB |
Output is correct |
5 |
Correct |
2 ms |
2600 KB |
Output is correct |
6 |
Correct |
2 ms |
2600 KB |
Output is correct |
7 |
Correct |
2 ms |
2600 KB |
Output is correct |
8 |
Correct |
2 ms |
2600 KB |
Output is correct |
9 |
Correct |
23 ms |
2600 KB |
Output is correct |
10 |
Correct |
21 ms |
2600 KB |
Output is correct |
11 |
Correct |
11 ms |
2600 KB |
Output is correct |
12 |
Correct |
11 ms |
2600 KB |
Output is correct |
13 |
Incorrect |
4 ms |
2600 KB |
Output isn't correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
2600 KB |
Output is correct |
2 |
Correct |
3 ms |
2600 KB |
Output is correct |
3 |
Correct |
2 ms |
2600 KB |
Output is correct |
4 |
Correct |
2 ms |
2600 KB |
Output is correct |
5 |
Correct |
2 ms |
2600 KB |
Output is correct |
6 |
Correct |
2 ms |
2600 KB |
Output is correct |
7 |
Correct |
2 ms |
2600 KB |
Output is correct |
8 |
Correct |
2 ms |
2600 KB |
Output is correct |
9 |
Correct |
24 ms |
2600 KB |
Output is correct |
10 |
Correct |
23 ms |
2600 KB |
Output is correct |
11 |
Correct |
10 ms |
2600 KB |
Output is correct |
12 |
Correct |
11 ms |
2600 KB |
Output is correct |
13 |
Incorrect |
4 ms |
2600 KB |
Output isn't correct |
14 |
Halted |
0 ms |
0 KB |
- |