//Power Of Ninja Go
#include <bits/stdc++.h>
#ifdef atom
#include "grader.cpp"
#else
#include "gondola.h"
#endif
using namespace std;
typedef long long ll; typedef pair<int, int> ii;
#define X first
#define Y second
#define vi vector<int>
#define vii vector< ii >
#define pb push_back
int valid(int n, int arr[])
{
for(int i = 0; i< n; i++) arr[i]--;
vi vec;
for(int i = 0; i< n; i++) vec.pb(arr[i]);
sort(vec.begin(), vec.end()); vec.resize(unique(vec.begin(), vec.end())-vec.begin());
if(vec.size() != n) return 0;
vi tmp;
for(int i = 0; i< n; i++) if(arr[i]< n) tmp.pb((arr[i]-i+n)%n);
sort(tmp.begin(), tmp.end()); tmp.resize(unique(tmp.begin(), tmp.end())-tmp.begin());
return (tmp.size()<= 1);
}
int replacement(int n, int arr[], int ans[])
{
for(int i = 0; i< n; i++) arr[i]--;
vi tmp;
for(int i = 0; i< n; i++) if(arr[i]< n) tmp.pb((arr[i]-i+n)%n);
sort(tmp.begin(), tmp.end()); tmp.resize(unique(tmp.begin(), tmp.end())-tmp.begin());
int q = tmp.size();
int st = q?tmp[0]:0;
vii strange;
for(int i = 0; i< n; i++) if(arr[i]>= n) strange.pb(ii(arr[i], (i+st)%n));
sort(strange.begin(), strange.end());
int ptr = 0;
for(int i = 0; i< strange.size(); i++)
{
//printf("%d %d\n", strange[i].X, strange[i].Y);
int prv = i?strange[i-1].X:n-1;
int rounds = strange[i].X-prv;
rounds--;
ans[ptr++] = strange[i].Y+1;
while(rounds--)
{
ans[ptr] = n+ptr;
ptr++;
}
}
return ptr;
}
//----------------------
const int md = 1e9+9;
int mul(int a, int b)
{
return (1LL*a*b)%md;
}
int ninja(int a, int b)
{
if(b == 0) return 1;
int x = ninja(a, b/2);
int y = mul(x, x);
if(b%2) y = mul(y, a);
return y;
}
int countReplacement(int n, int arr[])
{
if(!valid(n, arr)) return 0;
vi tmp;
for(int i = 0; i< n; i++) if(arr[i]< n) tmp.pb((arr[i]-i+n)%n);
sort(tmp.begin(), tmp.end()); tmp.resize(unique(tmp.begin(), tmp.end())-tmp.begin());
int q = tmp.size();
int st = q?tmp[0]:0;
vii strange;
for(int i = 0; i< n; i++) if(arr[i]>= n) strange.pb(ii(arr[i], (i+st)%n));
sort(strange.begin(), strange.end());
int ptr = 0;
int res = 1;
for(int i = 0; i< strange.size(); i++)
{
//printf("%d %d\n", strange[i].X, strange[i].Y);
int prv = i?strange[i-1].X:n-1;
int rounds = strange[i].X-prv;
rounds--;
//printf("pow %d %d\n", strange.size()-i, rounds);
res = mul(res, ninja(strange.size()-i, rounds));
}
if(!q) res = mul(res, strange.size());
return res;
}
Compilation message
gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:21:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if(vec.size() != n) return 0;
^
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:39:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 0; i< strange.size(); i++)
^
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:82:21: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 0; i< strange.size(); i++)
^
gondola.cpp:80:9: warning: unused variable 'ptr' [-Wunused-variable]
int ptr = 0;
^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
248 KB |
Output is correct |
2 |
Correct |
1 ms |
352 KB |
Output is correct |
3 |
Correct |
1 ms |
424 KB |
Output is correct |
4 |
Correct |
1 ms |
440 KB |
Output is correct |
5 |
Correct |
1 ms |
440 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
444 KB |
Output is correct |
2 |
Correct |
2 ms |
568 KB |
Output is correct |
3 |
Correct |
1 ms |
568 KB |
Output is correct |
4 |
Correct |
2 ms |
568 KB |
Output is correct |
5 |
Correct |
1 ms |
568 KB |
Output is correct |
6 |
Correct |
11 ms |
1192 KB |
Output is correct |
7 |
Correct |
19 ms |
1464 KB |
Output is correct |
8 |
Correct |
15 ms |
1844 KB |
Output is correct |
9 |
Correct |
7 ms |
1844 KB |
Output is correct |
10 |
Correct |
25 ms |
1980 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
1980 KB |
Output is correct |
2 |
Correct |
1 ms |
1980 KB |
Output is correct |
3 |
Correct |
2 ms |
1980 KB |
Output is correct |
4 |
Correct |
1 ms |
1980 KB |
Output is correct |
5 |
Correct |
2 ms |
1980 KB |
Output is correct |
6 |
Correct |
11 ms |
1980 KB |
Output is correct |
7 |
Correct |
19 ms |
1980 KB |
Output is correct |
8 |
Correct |
15 ms |
1980 KB |
Output is correct |
9 |
Correct |
6 ms |
1980 KB |
Output is correct |
10 |
Correct |
21 ms |
2020 KB |
Output is correct |
11 |
Correct |
1 ms |
2020 KB |
Output is correct |
12 |
Correct |
1 ms |
2020 KB |
Output is correct |
13 |
Correct |
10 ms |
2020 KB |
Output is correct |
14 |
Correct |
2 ms |
2020 KB |
Output is correct |
15 |
Correct |
26 ms |
2020 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
2020 KB |
Output is correct |
2 |
Correct |
1 ms |
2020 KB |
Output is correct |
3 |
Correct |
1 ms |
2020 KB |
Output is correct |
4 |
Correct |
1 ms |
2020 KB |
Output is correct |
5 |
Correct |
1 ms |
2020 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2020 KB |
Output is correct |
2 |
Correct |
1 ms |
2020 KB |
Output is correct |
3 |
Correct |
2 ms |
2020 KB |
Output is correct |
4 |
Correct |
2 ms |
2020 KB |
Output is correct |
5 |
Correct |
2 ms |
2020 KB |
Output is correct |
6 |
Correct |
1 ms |
2020 KB |
Output is correct |
7 |
Correct |
2 ms |
2020 KB |
Output is correct |
8 |
Correct |
2 ms |
2020 KB |
Output is correct |
9 |
Correct |
2 ms |
2020 KB |
Output is correct |
10 |
Correct |
2 ms |
2020 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2020 KB |
Output is correct |
2 |
Correct |
1 ms |
2020 KB |
Output is correct |
3 |
Correct |
1 ms |
2020 KB |
Output is correct |
4 |
Correct |
1 ms |
2020 KB |
Output is correct |
5 |
Correct |
1 ms |
2020 KB |
Output is correct |
6 |
Correct |
1 ms |
2020 KB |
Output is correct |
7 |
Correct |
2 ms |
2020 KB |
Output is correct |
8 |
Correct |
2 ms |
2020 KB |
Output is correct |
9 |
Correct |
2 ms |
2020 KB |
Output is correct |
10 |
Correct |
2 ms |
2020 KB |
Output is correct |
11 |
Correct |
15 ms |
2020 KB |
Output is correct |
12 |
Correct |
15 ms |
2020 KB |
Output is correct |
13 |
Correct |
16 ms |
2020 KB |
Output is correct |
14 |
Correct |
13 ms |
2020 KB |
Output is correct |
15 |
Correct |
22 ms |
2564 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
2564 KB |
Output is correct |
2 |
Correct |
1 ms |
2564 KB |
Output is correct |
3 |
Correct |
1 ms |
2564 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2564 KB |
Output is correct |
2 |
Correct |
2 ms |
2564 KB |
Output is correct |
3 |
Correct |
1 ms |
2564 KB |
Output is correct |
4 |
Correct |
1 ms |
2564 KB |
Output is correct |
5 |
Correct |
1 ms |
2564 KB |
Output is correct |
6 |
Correct |
1 ms |
2564 KB |
Output is correct |
7 |
Correct |
1 ms |
2564 KB |
Output is correct |
8 |
Correct |
1 ms |
2564 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2564 KB |
Output is correct |
2 |
Correct |
1 ms |
2564 KB |
Output is correct |
3 |
Correct |
1 ms |
2564 KB |
Output is correct |
4 |
Correct |
2 ms |
2564 KB |
Output is correct |
5 |
Correct |
2 ms |
2564 KB |
Output is correct |
6 |
Correct |
2 ms |
2564 KB |
Output is correct |
7 |
Correct |
1 ms |
2564 KB |
Output is correct |
8 |
Correct |
2 ms |
2564 KB |
Output is correct |
9 |
Correct |
26 ms |
2564 KB |
Output is correct |
10 |
Correct |
21 ms |
2564 KB |
Output is correct |
11 |
Correct |
9 ms |
2564 KB |
Output is correct |
12 |
Correct |
16 ms |
2564 KB |
Output is correct |
13 |
Correct |
4 ms |
2564 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
2564 KB |
Output is correct |
2 |
Correct |
1 ms |
2564 KB |
Output is correct |
3 |
Correct |
1 ms |
2564 KB |
Output is correct |
4 |
Correct |
1 ms |
2564 KB |
Output is correct |
5 |
Correct |
1 ms |
2564 KB |
Output is correct |
6 |
Correct |
1 ms |
2564 KB |
Output is correct |
7 |
Correct |
1 ms |
2564 KB |
Output is correct |
8 |
Correct |
1 ms |
2564 KB |
Output is correct |
9 |
Correct |
27 ms |
2564 KB |
Output is correct |
10 |
Correct |
23 ms |
2564 KB |
Output is correct |
11 |
Correct |
9 ms |
2564 KB |
Output is correct |
12 |
Correct |
11 ms |
2564 KB |
Output is correct |
13 |
Correct |
4 ms |
2564 KB |
Output is correct |
14 |
Correct |
34 ms |
2608 KB |
Output is correct |
15 |
Correct |
37 ms |
2608 KB |
Output is correct |
16 |
Correct |
8 ms |
2608 KB |
Output is correct |
17 |
Correct |
25 ms |
2608 KB |
Output is correct |
18 |
Correct |
15 ms |
2608 KB |
Output is correct |