Submission #791983

#TimeUsernameProblemLanguageResultExecution timeMemory
791983caganyanmazGondola (IOI14_gondola)C++17
55 / 100
34 ms4668 KiB
#include "gondola.h"
#define pb push_back
#define mp(x...) array<int,2>({x})
#include <bits/stdc++.h>
using namespace std;

int n;
int *v;

int fix(int i)
{
        int res = i % n;
        if (res < 0)
                res += n;
        return res;
}

int right(int i)
{
        return fix(i+1);
}

bool unique()
{
        set<int> numbers;
        for (int i = 0; i < n; i++)
        {
                if (numbers.find(v[i]) != numbers.end())
                        return 0;
                numbers.insert(v[i]);
        }
        return 1;
}

int find_mi()
{
        int mi = 0;
        for (int i = 1; i < n; i++)
                if (v[i] < v[mi])
                        mi = i;
        return mi;
}

int valid(int nn, int vv[])
{
        v = vv;
        n = nn;
        if (!unique())
                return 0;
        int mi = find_mi();
        if (v[mi] > n)
                return 1;
        int si = fix(mi - v[mi] + 1);
        if (v[si] != 1 && v[si] <= n)
                return 0;
        for (int j = right(si), i = 1; j != si; j=right(j))
                if (v[j] != ++i && v[j] <= n)
                        return 0;
        return 1;
}

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

int replacement(int nn, int vv[], int rr[])
{
        n = nn;
        v = vv;
        int mi = find_mi();
        vector<array<int, 2>> p;
        int si = fix(mi - v[mi] + 1);
        if (v[si] > n)
                p.pb(mp(v[si], 1));
        for (int j = right(si), i = 2; j != si; j=right(j), i++)
                if (v[j] > n)
                        p.pb(mp(v[j], i));
        sort(p.begin(), p.end());
        int li = n;
        for (auto [val, i] : p)
        {
                rr[(li++)-n] = i;
                while (li != val) {rr[li-n] = li; li++;}
        }
        return li - n;


}

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

int countReplacement(int n, int inputSeq[])
{
        return 0;
}
#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...