# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
320859 | daniel920712 | Gondola (IOI14_gondola) | C++14 | 70 ms | 6372 KiB |
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 <vector>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
using namespace std;
map < int , int > con;
int all[100005];
set < int > have;
priority_queue < pair < int , int > , vector < pair < int , int > > , greater < pair < int , int > > > how ;
int valid(int n, int inputSeq[])
{
int what,ok=1,i;
for(i=1;i<=n;i++) all[i]=1e9;
for(i=0;i<n;i++)
{
con[inputSeq[i]]++;
if(con[inputSeq[i]]>=2) ok=0;
if(inputSeq[i]>n) continue;
all[inputSeq[i]]=(inputSeq[i]-i+n)%n;
what=(inputSeq[i]-i+n)%n;
}
for(i=1;i<=n;i++) if(all[i]!=1000000000&&all[i]!=what) ok=0;
return ok;
}
//----------------------
bool F(pair < int , int > a,pair < int , int > b)
{
return a.second<b.second;
}
pair < int , int > All[100005];
int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
int now=0,con=0,where=0,big=0,t,i,x,y,nxt;
for(i=0;i<n;i++)
{
if(gondolaSeq[i]>n) con++;
else where=i;
}
if(con==n) for(i=0;i<n;i++) All[i]=make_pair(i+1,gondolaSeq[i]);
else
{
x=0;
y=gondolaSeq[where];
for(i=where;x<n;i++,i%=n,x++)
{
All[i]=make_pair(y,gondolaSeq[i]);
y++;
if(y>n) y%=n;
}
}
nxt=n+1;
sort(All,All+n,F);
for(i=0;i<n;i++)
{
while(All[i].first!=All[i].second)
{
replacementSeq[now++]=All[i].first;
All[i].first=nxt;
nxt++;
}
}
return now;
}
//----------------------
long long MOD=1e9+9;
long long Pow(int a,int b)
{
if(b==0) return 1;
long long t=Pow(a,b/2);
t=t*t%MOD;
if(b%2) t=t*a%MOD;
return t;
}
int countReplacement(int n, int inputSeq[])
{
int what,ok=1,i,x=0,now=n,tt=n;
long long ans=1;
for(i=1;i<=n;i++) all[i]=2e9;
for(i=0;i<n;i++)
{
con[inputSeq[i]]++;
if(con[inputSeq[i]]>=2) ok=0;
if(inputSeq[i]>n)
{
x++;
continue;
}
all[inputSeq[i]]=(inputSeq[i]-i+n)%n;
what=(inputSeq[i]-i+n)%n;
}
for(i=1;i<=n;i++) if(all[i]!=2000000000&&all[i]!=what) ok=0;
if(ok==0) return 0;
if(x==0) return 1;
if(x==n) ans=n;
sort(inputSeq,inputSeq+n);
for(i=0;i<n;i++)
{
if(inputSeq[i]<=n) now--;
else
{
ans*=Pow(now,inputSeq[i]-tt-1);
ans%=MOD;
now--;
tt=inputSeq[i];
}
}
return (int) ans%MOD;
}
Compilation message (stderr)
# | 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... |