Submission #1152079

#TimeUsernameProblemLanguageResultExecution timeMemory
1152079alexddGondola (IOI14_gondola)C++20
20 / 100
44 ms4680 KiB
#include "gondola.h"
#include <bits/stdc++.h>
using namespace std;
int valid(int n, int inputSeq[])
{
    map<int,int> idk;
    for(int i=0;i<n;i++)
    {
        if(idk[inputSeq[i]])
            return 0;
        idk[inputSeq[i]]++;
    }
    for(int i=0;i<n;i++)
    {
        if(inputSeq[i] <= n)
        {
            for(int j=0;j<n;j++)
            {
                if(inputSeq[(i+j)%n]<=n && inputSeq[(i+j)%n] != (inputSeq[i]-1 + j)%n + 1)
                    return 0;
            }
            return 1;
        }
    }
    return 1;
}

//----------------------

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
    for(int i=0;i<n;i++)
        gondolaSeq[i]--;
    vector<int> init(n),init_poz(n),final_poz(250000,-1);
    int maxv=-1;
    for(int i=0;i<n;i++)
    {
        final_poz[gondolaSeq[i]]=i;
        maxv = max(maxv, gondolaSeq[i]);
    }
    for(int i=0;i<n;i++)
    {
        if(gondolaSeq[i]<n || i==n-1)
        {
            for(int j=0;j<n;j++)
                init[(i+j)%n] = (gondolaSeq[i]+j)%n;
            for(int j=0;j<n;j++)
                init_poz[init[j]]=j;
            int lun=0;
            for(int j=n;j<=maxv;j++)
            {
                if(final_poz[j]==-1)
                {
                    bool gasit=0;
                    for(int u=0;u<n;u++)
                    {
                        if(final_poz[init[u]] == -1)
                        {
                            replacementSeq[lun++] = init[u];
                            init[u] = j;
                            init_poz[j] = u;
                            init_poz[replacementSeq[lun-1]] = -1;
                            gasit=1;
                            break;
                        }
                    }
                    assert(gasit);
                }
                else
                {
                    replacementSeq[lun++] = init[final_poz[j]];
                    init[final_poz[j]] = j;
                    init_poz[j] = final_poz[j];
                    init_poz[replacementSeq[lun-1]] = -1;
                }
            }
            for(int i=0;i<lun;i++)
                replacementSeq[i]++;
            return lun;
        }
    }
    while(1);
    assert(0);
}

//----------------------

int countReplacement(int n, int inputSeq[])
{
    if(!valid(n,inputSeq))
        return 0;

    return -3;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...