제출 #281575

#제출 시각아이디문제언어결과실행 시간메모리
281575SamAnd곤돌라 (IOI14_gondola)C++17
75 / 100
45 ms4984 KiB
#include "gondola.h"
#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define m_p make_pair
#define all(x) (x).begin(),(x).end()
#define sz(x) ((int)(x).size())
typedef long long ll;
const int N = 100005, M = 1000000009;

int n;
int a[N];

int valid(int n, int inputSeq[])
{
    ::n = n;
    for (int i = 0; i < n; ++i)
        a[i] = inputSeq[i];

    set<int> s;
    for (int i = 0; i < n; ++i)
        s.insert(a[i]);
    if (sz(s) != n)
        return 0;

    int minu = M;
    int mini;
    for (int i = 0; i < n; ++i)
    {
        if (a[i] < minu)
        {
            minu = a[i];
            mini = i;
        }
    }

    int q = 0;
    for (int i = mini; i < n; ++i)
    {
        if (a[i] <= n)
        {
            if (a[i] != minu + q)
                return 0;
        }
        ++q;
    }
    for (int i = 0; i < mini; ++i)
    {
        if (a[i] <= n)
        {
            if (a[i] != minu + q)
                return 0;
        }
        ++q;
    }

    return 1;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
    ::n = n;
    for (int i = 0; i < n; ++i)
        a[i] = gondolaSeq[i];

    int m = 0;

    vector<pair<int, int> > v;
    for (int i = 0; i < n; ++i)
    {
        if (a[i] > n)
        {
            v.push_back(m_p(a[i], i));
        }
    }

    sort(all(v));
    reverse(all(v));

    ///////////////////////////////////////////
    int minu = M;
    int mini;
    for (int i = 0; i < n; ++i)
    {
        if (a[i] < minu)
        {
            minu = a[i];
            mini = i;
        }
    }

    if (minu > n)
    {
        minu = 1;
    }

    for (int i = mini; i < n; ++i)
    {
        if (minu > n)
            minu = 1;
        a[i] = minu;
        ++minu;
    }
    for (int i = 0; i < mini; ++i)
    {
        if (minu > n)
            minu = 1;
        a[i] = minu;
        ++minu;
    }
    ///////////////////////////////////////////

    int u = n + 1;
    while (!v.empty())
    {
        if (u == v.back().fi)
        {
            replacementSeq[m++] = a[v.back().se];
            a[v.back().se] = u;
            v.pop_back();
        }
        else
        {
            replacementSeq[m++] = a[v.back().se];
            a[v.back().se] = u;
        }
        ++u;
    }

    return m;
}

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

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

    ::n = n;
    for (int i = 0; i < n; ++i)
        a[i] = inputSeq[i];

    vector<pair<int, int> > v;
    for (int i = 0; i < n; ++i)
    {
        if (a[i] > n)
        {
            v.push_back(m_p(a[i], i));
        }
    }

    sort(all(v));
    reverse(all(v));

    int ans = 1;

    int u = n + 1;
    while (!v.empty())
    {
        if (u == v.back().fi)
        {
            v.pop_back();
        }
        else
        {
            ans = (ans * 1LL * sz(v)) % M;
        }
        ++u;
    }

    return ans;
}

컴파일 시 표준 에러 (stderr) 메시지

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:28:9: warning: 'mini' may be used uninitialized in this function [-Wmaybe-uninitialized]
   28 |     int mini;
      |         ^~~~
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:85:9: warning: 'mini' may be used uninitialized in this function [-Wmaybe-uninitialized]
   85 |     int mini;
      |         ^~~~
#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...