This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
#include "gondola.h"
using namespace std;
#define ll long long
#define fi first
#define se second
int valid(int n, int inputSeq[]){
int mi=1e9,pos=0;
vector<int> k;
for(int i=0;i<n;i++)k.push_back(inputSeq[i]);
sort(k.begin(),k.end());
for(int i=1;i<n;i++){
if(k[i]==k[i-1])return 0;
}
for(int i=0;i<n;i++)k[i]=inputSeq[i];
for(int i=0;i<n;i++){
if(k[i]<mi){
mi=k[i];
pos=i;
}
}
if(mi>n)return 1;
pos-=mi-1;
pos=(pos+2*n)%n;
int cur=0;
for(int i=pos;i<pos+n;i++){
cur++;
int x=i%n;
if(k[x]>n)continue;
if(k[x]!=cur)return 0;
}
return 1;
}
//----------------------
int replacement(int n, int gondolaSeq[], int replacementSeq[]){
vector<int> k(n);
for(int i=0;i<n;i++)k[i]=gondolaSeq[i];
int mi=1e9,pos=0;
for(int i=0;i<n;i++){
if(k[i]<mi){
mi=k[i];
pos=i;
}
}
pos=((pos-mi+1)%n+n*2)%n;
vector<pair<int,int> >repl;
int cur=0;
for(int i=pos;i<pos+n;i++){
cur++;
int x=i%n;
if(k[x]==cur)continue;
repl.push_back({k[x],cur});
}
sort(repl.begin(),repl.end());
vector<int> ans;
int prec=n;
for(int i=0;i<repl.size();i++){
ans.push_back(repl[i].second);
prec++;
while(prec<repl[i].first){
ans.push_back(prec);
prec++;
}
}
for(int i=0;i<ans.size();i++)replacementSeq[i]=ans[i];
return ans.size();
}
//----------------------
const ll mod=1e9+9;
ll pot(ll a,ll b){
if(b==0)return 1;
ll x=pot(a,b/2);
if(b%2)return x*x%mod*a%mod;
return x*x%mod;
}
int countReplacement(int n, int inputSeq[]){
if(valid(n,inputSeq)==0)return 0;
vector<int> k(n);
for(int i=0;i<n;i++)k[i]=inputSeq[i];
int mi=1e9,pos=0;
for(int i=0;i<n;i++){
if(k[i]<mi){
mi=k[i];
pos=i;
}
}
ll sol=1;
if(mi>n){
sol=n;
}
pos=((pos-mi+1)%n+n*2)%n;
vector<ll>repl;
int cur=0;
for(int i=pos;i<pos+n;i++){
cur++;
int x=i%n;
if(k[x]==cur)continue;
repl.push_back(k[x]);
}
if(repl.size()==0)return 0;
sort(repl.begin(),repl.end());
for(int i=repl.size()-2;i>=0;i--){
sol*=pot(repl.size()-i-1,repl[i+1]-repl[i]-1);
sol%=mod;
}
sol*=pot(repl.size(),repl[0]-n-1);
sol%=mod;
return sol;
}
Compilation message (stderr)
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:61:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
61 | for(int i=0;i<repl.size();i++){
| ~^~~~~~~~~~~~
gondola.cpp:69:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
69 | for(int i=0;i<ans.size();i++)replacementSeq[i]=ans[i];
| ~^~~~~~~~~~~
# | 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... |