이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 *= _pos;
_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;
bool fuck = 1;
for( int i = 0 ; i < n ; i++ ){
if( inputSeq[i] > n ) lol = 0;
if( inputSeq[i] <= n ) fuck = 0;
v.push_back(inputSeq[i]);
}
if( lol == 1 ) return 1;
sort( v.begin(), v.end());
long long s = 1;
int 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;
}
if( fuck == 1 ){
s *= (long long)n;
s %= 1000000009;
}
return s;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |