#include "gondola.h"
#include <algorithm>
#include <vector>
#include <stdio.h>
int valid( int n, int inputSeq[] ) {
int shift_min = n, shift_max = -1;
std::vector<int> vals( n );
for( int i = 0 ; i < n ; i++ ){
vals[i] = inputSeq[i];
if( inputSeq[i] > n )
continue;
if( inputSeq[i] <= 0 )
return false;
int shift = (inputSeq[i] - 1 + n - i) % n;
shift_min = std::min( shift_min, shift );
shift_max = std::max( shift_max, shift );
}
for( int i = 1 ; i < n ; i++ )
if( vals[i - 1] == vals[i] )
return false;
if( shift_max < 0 )
return true;
return shift_min == shift_max;
}
//----------------------
int replacement( int n, int gondolaSeq[], int replacementSeq[] ) {
std::vector<int> base( n );
bool has_base = false;
std::vector<std::pair<int, int>> repl;
for( int i = 0 ; i < n ; i++ ){
int x = gondolaSeq[i];
if( !has_base && x <= n ){
has_base = true;
for( int j = 0 ; j < n ; j++ )
base[(i + j) % n] = (x - 1 + j) % n + 1;
}
if( x > n )
repl.emplace_back( x, i );
}
if( !has_base )
for( int i = 0 ; i < n ; i++ )
base[i] = i + 1;
std::sort( repl.begin(), repl.end() );
int len = 0, last = n;
for( auto p : repl ){
// o nu... nu am c++17 in 2014
int idx = p.second;
int val = p.first;
while( base[idx] != val ){
replacementSeq[len++] = base[idx];
base[idx] = ++last;
}
}
return len;
}
//----------------------
const int MOD = 1e9 + 9;
using ll = long long;
struct ZP {
int x;
ZP( ll x = 0 ): x( x % MOD ) {}
explicit operator int() { return x; }
ZP operator *= ( const ZP& that ) { return *this = ZP( x * (ll)that.x ); }
ZP operator += ( const ZP& that ) {
x += that.x;
if( x >= MOD )
x -= MOD;
return *this;
}
ZP operator * ( const ZP& that ) const { return ZP( *this ) *= that; }
ZP operator + ( const ZP& that ) const { return ZP( *this ) += that; }
};
ZP lgput( ZP base, int exp ) {
ZP ret = 1;
while( exp ){
if( exp & 1 )
ret *= base;
base *= base;
exp >>= 1;
}
return ret;
}
int countReplacement( int n, int inputSeq[] ) {
if( !valid( n, inputSeq ) )
return 0;
std::vector<int> base( n );
bool has_base = false;
std::vector<std::pair<int, int>> repl;
for( int i = 0 ; i < n ; i++ ){
int x = inputSeq[i];
if( !has_base && x <= n ){
has_base = true;
for( int j = 0 ; j < n ; j++ )
base[(i + j) % n] = (x - 1 + j) % n + 1;
}
if( x > n )
repl.emplace_back( x, i );
}
std::sort( repl.begin(), repl.end() );
ZP ret = 1;
int variante = (int)repl.size();
int prev = n;
for( auto p : repl ){
int val = p.first;
int idx = p.second;
//printf( "askhdbsahkdas, variante = %d\n", variante );
ret *= lgput( ZP( variante ), val - prev - 1 );
variante--;
prev = val;
}
// mai avem inca n variante la alegerea primului element din vectorul final (shiftul)
if( !has_base )
ret *= ZP( n );
return int(ret);
}
Compilation message
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:149:9: warning: unused variable 'idx' [-Wunused-variable]
149 | int idx = p.second;
| ^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
1 ms |
348 KB |
Output is correct |
4 |
Correct |
1 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
344 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
3 ms |
604 KB |
Output is correct |
7 |
Correct |
6 ms |
1112 KB |
Output is correct |
8 |
Correct |
5 ms |
860 KB |
Output is correct |
9 |
Correct |
2 ms |
604 KB |
Output is correct |
10 |
Correct |
6 ms |
860 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
1 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
3 ms |
600 KB |
Output is correct |
7 |
Correct |
7 ms |
1116 KB |
Output is correct |
8 |
Correct |
5 ms |
956 KB |
Output is correct |
9 |
Correct |
2 ms |
600 KB |
Output is correct |
10 |
Correct |
6 ms |
860 KB |
Output is correct |
11 |
Correct |
0 ms |
344 KB |
Output is correct |
12 |
Correct |
0 ms |
348 KB |
Output is correct |
13 |
Correct |
3 ms |
500 KB |
Output is correct |
14 |
Correct |
0 ms |
348 KB |
Output is correct |
15 |
Correct |
6 ms |
1048 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
1 ms |
344 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
616 KB |
Output is correct |
2 |
Correct |
0 ms |
500 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
1 ms |
344 KB |
Output is correct |
8 |
Correct |
1 ms |
348 KB |
Output is correct |
9 |
Correct |
1 ms |
348 KB |
Output is correct |
10 |
Correct |
1 ms |
344 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
344 KB |
Output is correct |
9 |
Correct |
1 ms |
348 KB |
Output is correct |
10 |
Correct |
1 ms |
348 KB |
Output is correct |
11 |
Correct |
6 ms |
920 KB |
Output is correct |
12 |
Correct |
7 ms |
1116 KB |
Output is correct |
13 |
Correct |
14 ms |
1316 KB |
Output is correct |
14 |
Correct |
6 ms |
856 KB |
Output is correct |
15 |
Correct |
18 ms |
2388 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
344 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
1 ms |
344 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
1 ms |
348 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
344 KB |
Output is correct |
3 |
Correct |
0 ms |
344 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
1 ms |
348 KB |
Output is correct |
6 |
Correct |
1 ms |
348 KB |
Output is correct |
7 |
Correct |
1 ms |
348 KB |
Output is correct |
8 |
Correct |
0 ms |
348 KB |
Output is correct |
9 |
Correct |
11 ms |
2108 KB |
Output is correct |
10 |
Correct |
11 ms |
1900 KB |
Output is correct |
11 |
Correct |
4 ms |
1112 KB |
Output is correct |
12 |
Correct |
5 ms |
1116 KB |
Output is correct |
13 |
Correct |
1 ms |
600 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
1 ms |
428 KB |
Output is correct |
6 |
Correct |
0 ms |
348 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
600 KB |
Output is correct |
9 |
Correct |
11 ms |
2108 KB |
Output is correct |
10 |
Correct |
9 ms |
1848 KB |
Output is correct |
11 |
Correct |
4 ms |
1112 KB |
Output is correct |
12 |
Correct |
5 ms |
1112 KB |
Output is correct |
13 |
Correct |
1 ms |
600 KB |
Output is correct |
14 |
Correct |
15 ms |
3348 KB |
Output is correct |
15 |
Correct |
20 ms |
3560 KB |
Output is correct |
16 |
Correct |
5 ms |
1112 KB |
Output is correct |
17 |
Correct |
11 ms |
2344 KB |
Output is correct |
18 |
Correct |
6 ms |
1556 KB |
Output is correct |