#include "gondola.h"
#include <iostream>
#include<cstdio>
#include<vector>
#include<bits/stdc++.h>
using namespace std;
long long power( int x, int e ){
long long _pos = x;
long long _s = 1;
while( e ){
int a = e % 2;
if( a == 1 ){
_s *= _pos;
_s %= 1000000009;
}
_pos *= x;
_pos %= 1000000009;
e /= 2;
}
return _s;
}
int valid(int n, int inputSeq[])
{
map< int, bool> m;
bool lol = 1;
int ind = -1;
for( int i = 0 ; i < n ; i++ ){
if( inputSeq[i] <= n ){
lol = 0;
ind = i;
}
if( inputSeq[i] > n ){
if( m[inputSeq[i]] == 1 ) return 0;
m[inputSeq[i]] = 1;
}
}
if( lol == 1 ){
return 1;
}
int ct[n + 5];
int nn = n + inputSeq[ind] - 1 - ind;
for( int i = 0 ; i < n ; i++ ){
ct[(nn + i) % n] = inputSeq[i];
}
for( int i = 0 ; i < n ; i++ ){
if( ct[i] <= n ){
if( i != ct[i] - 1 ){
return 0;
}
}
}
return 1;
}
//----------------------
int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
int ind = -1;
int ct[n + 5];
vector< pair<int, int> >v;
for( int i = 0 ; i < n ; i++ ){
if( gondolaSeq[i] <= n ){
ind = i;
}
}
int nn = n + gondolaSeq[ind] - 1 - ind;
for( int i = 0 ; i < n ; i++ ){
ct[(nn + i) % n] = gondolaSeq[i];
}
for( int i = 0 ; i < n ; i++ ){
v.push_back( make_pair(ct[i], i));
}
sort( v.begin(), v.end());
int pos = 0;
for( int i = 0 ; i < n ; i++ ){
int ct1 = v[i].first;
if( ct1 <= n ) continue;
if( i == 0 ){
replacementSeq[pos] = v[0].second + 1;
pos++;
for( int ii = n + 1 ; ii < v[0].first ; ii++ ){
replacementSeq[pos] = ii;
pos++;
}
continue;
}
if( v[i - 1].first <= n ){
replacementSeq[pos] = v[i].second + 1;
pos++;
for( int ii = n + 1 ; ii < v[i].first ; ii++ ){
replacementSeq[pos] = ii;
pos++;
}
continue;
}
replacementSeq[pos] = v[i].second + 1;
pos++;
for( int ii = v[i-1].first + 1 ; ii < v[i].first ; ii++ ){
replacementSeq[pos] = ii;
pos++;
}
}
return pos;
}
//----------------------
int countReplacement(int n, int inputSeq[])
{
if( valid( n, inputSeq[]) != 1 ){
return 0;
}
vector<int> v;
bool lol = 1;
for( int i = 0 ; i < n ; i++ ){
if( inputSeq[i] > n ) lol = 0;
v.push_back(inputSeq[i]);
}
if( lol == 1 ) return 1;
sort( v.begin(), v.end());
long long s = 1;
pos = n + 1;
for( int i = 0 ; i < n ; i++){
if( v[i] <= n ) continue;
s *= power( n - i, v[i] - pos );
s %= 1000000009;
pos = v[i] + 1;
}
return s;
}
Compilation message
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:116:28: error: expected primary-expression before ']' token
if( valid( n, inputSeq[]) != 1 ){
^
gondola.cpp:129:5: error: 'pos' was not declared in this scope
pos = n + 1;
^~~
gondola.cpp:129:5: note: suggested alternative: 'pow'
pos = n + 1;
^~~
pow