답안 #46771

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
46771 2018-04-23T04:51:20 Z RayaBurong25_1 곤돌라 (IOI14_gondola) C++17
100 / 100
88 ms 7876 KB
#include "gondola.h"
#include <vector>
#include <set>
#include <algorithm>
#include <stdio.h>
#define MOD 1000000009LL
int Vis[250005];
int valid(int n, int inputSeq[])
{
    int i, r = -1;
    for (i = 0; i < n; i++)
    {
        if (Vis[inputSeq[i]])
            return 0;
        Vis[inputSeq[i]] = 1;
        if (inputSeq[i] <= n)
        {
            if (r == -1)
                r = (inputSeq[i] + n - (i + 1))%n;
            else if ((inputSeq[i] + n - (i + 1))%n != r)
                return 0;
        }
    }
    return 1;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
    int i, r = -1;
    for (i = 0; i < n; i++)
    {
        if (gondolaSeq[i] <= n)
        {
            if (r == -1)
            {
                r = (gondolaSeq[i] + n - (i + 1))%n;
                break;
            }
        }
    }
    if (r == -1)
        r = 0;
    std::vector<std::pair<int, int> > V;
    for (i = 0; i < n; i++)
    {
        if (gondolaSeq[i] > n)
        {
            V.push_back({gondolaSeq[i], i});
            gondolaSeq[i] = (i + r)%n + 1;
        }
    }
    if (V.size() == 0)
        return 0;
    std::sort(V.begin(), V.end());
    r = 0;
    int j = 0;
    for (i = n + 1; i <= V.back().first; i++)
    {
        replacementSeq[r] = gondolaSeq[V[j].second];
        gondolaSeq[V[j].second] = i;
        if (V[j].first == i)
            j++;
        r++;
    }
    return r;
}

//----------------------
long long pow(long long b, int e)
{
    // printf("pow %lld %d\n", b, e);
    if (e == 0)
        return 1LL;
    else if (e == 1)
        return b;
    else
    {
        long long r = pow(b, e/2);
        r = (r*r)%MOD;
        if (e%2)
            r = (r*b)%MOD;
        return r;
    }
}
int countReplacement(int n, int inputSeq[])
{
    int i, r = -1;
    std::set<int> S;
    for (i = 0; i < n; i++)
    {
        // printf("i%d\n", i);
        if (S.find(inputSeq[i]) != S.end())
            return 0;
        S.insert(inputSeq[i]);
        if (inputSeq[i] <= n)
        {
            if (r == -1)
                r = (inputSeq[i] + n - (i + 1))%n;
            else if ((inputSeq[i] + n - (i + 1))%n != r)
                return 0;
        }
    }
    // printf("r%d\n", r);
    std::vector<int> V;
    for (i = 0; i < n; i++)
    {
        if (inputSeq[i] > n)
        {
            V.push_back(inputSeq[i]);
        }
    }
    // printf("%d\n", V.size());
    if (V.size() == 0)
        return 1;
    std::sort(V.begin(), V.end());
    long long ans;
    if (V.size() == n)
        ans = n;
    else
        ans = 1LL;
    int j;
    for (j = 0; j < V.size(); j++)
    {
        if (j == 0)
            ans = (ans*pow((long long) V.size() - j, V[j] - n - 1))%MOD;
        else
            ans = (ans*pow((long long) V.size() - j, V[j] - V[j - 1] - 1))%MOD;
    }
    return (int) ans;
}

Compilation message

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:119:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (V.size() == n)
         ~~~~~~~~~^~~~
gondola.cpp:124:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (j = 0; j < V.size(); j++)
                 ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 1 ms 428 KB Output is correct
3 Correct 2 ms 428 KB Output is correct
4 Correct 2 ms 488 KB Output is correct
5 Correct 2 ms 536 KB Output is correct
6 Correct 7 ms 812 KB Output is correct
7 Correct 20 ms 812 KB Output is correct
8 Correct 11 ms 1100 KB Output is correct
9 Correct 8 ms 1100 KB Output is correct
10 Correct 15 ms 1148 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 1148 KB Output is correct
2 Correct 2 ms 1148 KB Output is correct
3 Correct 2 ms 1148 KB Output is correct
4 Correct 2 ms 1148 KB Output is correct
5 Correct 2 ms 1148 KB Output is correct
6 Correct 7 ms 1148 KB Output is correct
7 Correct 14 ms 1148 KB Output is correct
8 Correct 13 ms 1148 KB Output is correct
9 Correct 5 ms 1148 KB Output is correct
10 Correct 32 ms 1148 KB Output is correct
11 Correct 2 ms 1148 KB Output is correct
12 Correct 2 ms 1148 KB Output is correct
13 Correct 7 ms 1148 KB Output is correct
14 Correct 2 ms 1148 KB Output is correct
15 Correct 17 ms 1148 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 1148 KB Output is correct
2 Correct 2 ms 1148 KB Output is correct
3 Correct 2 ms 1148 KB Output is correct
4 Correct 2 ms 1148 KB Output is correct
5 Correct 2 ms 1148 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 1148 KB Output is correct
2 Correct 2 ms 1148 KB Output is correct
3 Correct 2 ms 1148 KB Output is correct
4 Correct 2 ms 1148 KB Output is correct
5 Correct 2 ms 1148 KB Output is correct
6 Correct 2 ms 1148 KB Output is correct
7 Correct 2 ms 1148 KB Output is correct
8 Correct 2 ms 1148 KB Output is correct
9 Correct 2 ms 1148 KB Output is correct
10 Correct 2 ms 1148 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1148 KB Output is correct
2 Correct 2 ms 1148 KB Output is correct
3 Correct 2 ms 1148 KB Output is correct
4 Correct 2 ms 1148 KB Output is correct
5 Correct 2 ms 1148 KB Output is correct
6 Correct 2 ms 1148 KB Output is correct
7 Correct 2 ms 1148 KB Output is correct
8 Correct 2 ms 1148 KB Output is correct
9 Correct 2 ms 1148 KB Output is correct
10 Correct 2 ms 1148 KB Output is correct
11 Correct 12 ms 1148 KB Output is correct
12 Correct 14 ms 1148 KB Output is correct
13 Correct 24 ms 1580 KB Output is correct
14 Correct 24 ms 1580 KB Output is correct
15 Correct 37 ms 2456 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2456 KB Output is correct
2 Correct 2 ms 2456 KB Output is correct
3 Correct 2 ms 2456 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2456 KB Output is correct
2 Correct 2 ms 2456 KB Output is correct
3 Correct 2 ms 2456 KB Output is correct
4 Correct 2 ms 2456 KB Output is correct
5 Correct 2 ms 2456 KB Output is correct
6 Correct 2 ms 2456 KB Output is correct
7 Correct 2 ms 2456 KB Output is correct
8 Correct 2 ms 2456 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2456 KB Output is correct
2 Correct 2 ms 2456 KB Output is correct
3 Correct 2 ms 2456 KB Output is correct
4 Correct 2 ms 2456 KB Output is correct
5 Correct 2 ms 2456 KB Output is correct
6 Correct 2 ms 2456 KB Output is correct
7 Correct 2 ms 2456 KB Output is correct
8 Correct 2 ms 2456 KB Output is correct
9 Correct 62 ms 4780 KB Output is correct
10 Correct 46 ms 4780 KB Output is correct
11 Correct 17 ms 4780 KB Output is correct
12 Correct 21 ms 4780 KB Output is correct
13 Correct 6 ms 4780 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 4780 KB Output is correct
2 Correct 2 ms 4780 KB Output is correct
3 Correct 2 ms 4780 KB Output is correct
4 Correct 2 ms 4780 KB Output is correct
5 Correct 2 ms 4780 KB Output is correct
6 Correct 2 ms 4780 KB Output is correct
7 Correct 2 ms 4780 KB Output is correct
8 Correct 2 ms 4780 KB Output is correct
9 Correct 61 ms 4780 KB Output is correct
10 Correct 61 ms 4780 KB Output is correct
11 Correct 26 ms 4780 KB Output is correct
12 Correct 20 ms 4780 KB Output is correct
13 Correct 6 ms 4780 KB Output is correct
14 Correct 76 ms 6316 KB Output is correct
15 Correct 88 ms 7876 KB Output is correct
16 Correct 15 ms 7876 KB Output is correct
17 Correct 56 ms 7876 KB Output is correct
18 Correct 29 ms 7876 KB Output is correct