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 "gondola.h"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define ios ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
#define all(a) a.begin(), a.end()
#define F first
#define S second
#define fp(a,i,c) for(int (a) = (i); (a) < (c); (a)++)
#define fm(a,i,c) for(int (a) = (i); (a) >= (c); (a)--)
#define vii vector<int>
#define vll vector<ll>
const long long mod=1e9+9;
ll binpow(ll a, ll n){
if(n==0) return 1;
ll res=binpow(a,n/2);
res=(res*res)%mod;
if(n%2) res=(res*a)%mod;
return res;
}
int valid(int n, int a[])
{
map<int,int> mp;
vector<pair<int,int>> pos;
for(int i=0;i<n;i++){
if(mp.count(a[i])) return 0;
mp[a[i]]=i;
}
bool ok=1;
for(int i=1;i<=n;i++){
if(mp.count(i)){
pos.push_back({mp[i],i});
}
}
for(int i=1;i<pos.size();i++){
int d=abs(pos[i-1].F-pos[i].F);
if(pos[i-1].F>pos[i].F){
d=n-d;
}
if(d!=pos[i].S-pos[i-1].S) return 0;
}
return 1;
}
//----------------------
int replacement(int n, int g[], int ans[])
{
int mn=0;
for(int i=0;i<n;i++){
if(g[mn]>g[i]) mn=i;
} vector<int> ng(n);
if(g[mn]<=n){
int cnt=0;mn-=g[mn]-1;
if(mn<0) mn+=n;// cout<<mn<<" mN\n";
for(int i=mn;i<n;i++) ng[cnt++]=g[i];
for(int i=0;i<mn;i++) ng[cnt++]=g[i];
}else for(int i=0;i<n;i++) ng[i]=g[i];
vector<pair<int,int>> pos;
for(int i=0;i<n;i++){
pos.push_back({ng[i],i+1});
}//for(int i=0;i<n;i++) cout<<ng[i]<<' ';cout<<endl;
sort(pos.begin(),pos.end());
int cur=n+1;
vector<int> res;
for(int i=0;i<n;i++){
if(pos[i].F==pos[i].S) continue;
res.push_back(pos[i].S);
while(cur<pos[i].F) res.push_back(cur++);
cur++;
}
for(int i=0;i<cur-n-1;i++) ans[i]=res[i];
return cur-n-1;
}
//----------------------
int countReplacement(int n, int inputSeq[])
{
if(valid(n,inputSeq)==0) return 0;
vector<ll> ng(n);
ll cnt=0;
for(int i=0;i<n;i++) ng[i]=inputSeq[i],cnt+=(ng[i]>n);
sort(all(ng));
ll cur=n+1;
ll ans=1; if(cnt==n) ans=n;
for(int i=0;i<n;i++){
if(ng[i]<=n) continue;
ans*=binpow(cnt,ng[i]-cur); ans%=mod; cnt--; cur=ng[i]+1;
}return ans;
}
Compilation message (stderr)
gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:39: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]
39 | for(int i=1;i<pos.size();i++){
| ~^~~~~~~~~~~
gondola.cpp:33:8: warning: unused variable 'ok' [-Wunused-variable]
33 | bool ok=1;
| ^~
# | 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... |