| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1361947 | ivaziva | Gondola (IOI14_gondola) | C++20 | 0 ms | 0 KiB |
#include <bits/stdc++.h>
#include "gondola.h"
using namespace std;
set<int> values;
int valid(int n, int inputSeq[])
{
bool valid=true;int last=-1;
for (int i=0;i<n;i++)
{
if (inputSeq[i]<=n and last==-1) {last=i;continue;}
if (inputSeq[i]>n) continue;
int diff=inputSeq[i]-inputSeq[last];
if (diff<0) diff+=n;
if (diff!=i-last) {valid=false;break;}
last=i;
}
for (int i=0;i<n;i++) values.insert(inputSeq[i]);
if (valid and (int)values.size()==n) return 1;
return 0;
}
#define MAXN 100001
int seq[MAXN];
vector<pair<int,int>> positions;
int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
int pocetak=-1;
for (int i=0;i<n;i++)
{
if (gondolaSeq[i]<=n) {pocetak=i;break;}
}
int curr=gondolaSeq[pocetak];
for (int i=pocetak;i<n;i++)
{
seq[i]=curr;curr++;if (curr==n+1) curr=1;
}
for (int i=0;i<pocetak;i++)
{
seq[i]=curr;curr++;if (curr==n+1) curr=1;
}
for (int i=0;i<n;i++)
{
if (gondolaSeq[i]>n) positions.push_back({gondolaSeq[i],i});
}
sort(positions.begin(),positions.end());if ((int)positions.size()==0) return 0;
int pointer=0;curr=n+1;int pozicija=0;
while (pointer<(int)positions.size())
{
while (curr<=positions[pointer].first) {replacementSeq[pozicija]=seq[positions[pointer].second];seq[positions[pointer].second]=curr;curr++;pozicija++;}
pointer++;
}
return positions[(int)positions.size()-1].first-n;
}