답안 #1004860

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1004860 2024-06-21T20:44:10 Z u_suck_o 곤돌라 (IOI14_gondola) C++17
90 / 100
12 ms 2392 KB
#include "bits/stdc++.h"
#include "gondola.h"
#define MOD 1000000009

using namespace std;

int valid(int n, int inputSeq[])
{
    bool seen[250001];
    memset(seen, 0, sizeof seen);
    bool found = false;
    int diff = -1;
    for (int i = 0; i < n; i++) {
        if (seen[inputSeq[i]]) return 0;
        seen[inputSeq[i]] = true;
        if (inputSeq[i] > n) continue;
        if (!found) {
            found = true;
            diff = (inputSeq[i] - i + n) % n;
        } else {
            if ((inputSeq[i] - i + n) % n != diff)
                return 0;
        }
    }
    return 1;
}

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
    int diff = 0;
    for (int i = 0; i < n; i++) {
        if (gondolaSeq[i] <= n) {
            diff = (gondolaSeq[i] - i + n) % n;
            break;
        }
    }
    
    vector<pair<int, int>> v;
    for (int i = 0; i < n; i++) {
        if (gondolaSeq[i] > n) {
            int x = (i+diff) % n;
            if (x == 0) x = n;
            v.push_back({gondolaSeq[i], x});
        }
    }
    sort(v.begin(), v.end());
    int last = n; //last assigned gondola #
    vector<int> rep;
    for (int i = 0; i < v.size(); i++) {
        rep.push_back(v[i].second); //v[i].second replaced with last+1
        for (int j = last+1; j < v[i].first; j++)
            rep.push_back(j); //j replaced with j+1
        last = v[i].first;
    }
    for (int i = 0; i < rep.size(); i++)
        replacementSeq[i] = rep[i];
    return rep.size();
}

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

long long modpow(long long b, long long e) {
    if (e == 0)
        return 1;
    if (e % 2 == 1)
        return (b * modpow(b, e-1)) % MOD;
    long long r = modpow(b, e/2);
    return (r * r) % MOD;
}

int countReplacement(int n, int inputSeq[])
{
    if (valid(n, inputSeq) == 0) return 0;
    bool fixed = false;
    for (int i = 0; i < n; i++) {
        if (inputSeq[i] <= n) {
            fixed = true;
            break;
        }
    }
    
    long long ans = 1;
    vector<long long> v;
    for (int i = 0; i < n; i++) {
        if (inputSeq[i] > n)
            v.push_back(inputSeq[i]);
    }
    sort(v.begin(), v.end());
    long long last = n;
    for (int i = 0; i < v.size(); i++) {
        ans = (ans * modpow(v.size()-i, v[i] - last - 1)) % MOD;
        last = v[i];
    }
    if (!fixed)
        return (n * ans) % MOD;
    return ans;
}

Compilation message

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:49:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   49 |     for (int i = 0; i < v.size(); i++) {
      |                     ~~^~~~~~~~~~
gondola.cpp:55:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   55 |     for (int i = 0; i < rep.size(); i++)
      |                     ~~^~~~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:90:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   90 |     for (int i = 0; i < v.size(); i++) {
      |                     ~~^~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 604 KB Output is correct
2 Correct 0 ms 604 KB Output is correct
3 Correct 0 ms 604 KB Output is correct
4 Correct 0 ms 604 KB Output is correct
5 Correct 0 ms 604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 604 KB Output is correct
2 Correct 0 ms 604 KB Output is correct
3 Correct 0 ms 604 KB Output is correct
4 Correct 0 ms 604 KB Output is correct
5 Correct 1 ms 604 KB Output is correct
6 Correct 2 ms 604 KB Output is correct
7 Correct 5 ms 868 KB Output is correct
8 Correct 5 ms 860 KB Output is correct
9 Correct 2 ms 604 KB Output is correct
10 Correct 6 ms 864 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 612 KB Output is correct
2 Correct 0 ms 604 KB Output is correct
3 Correct 0 ms 604 KB Output is correct
4 Correct 0 ms 604 KB Output is correct
5 Correct 0 ms 604 KB Output is correct
6 Correct 3 ms 776 KB Output is correct
7 Correct 5 ms 860 KB Output is correct
8 Correct 4 ms 860 KB Output is correct
9 Correct 1 ms 604 KB Output is correct
10 Correct 4 ms 788 KB Output is correct
11 Correct 0 ms 604 KB Output is correct
12 Correct 0 ms 604 KB Output is correct
13 Correct 2 ms 604 KB Output is correct
14 Correct 0 ms 604 KB Output is correct
15 Correct 4 ms 860 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 344 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 1 ms 348 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 4 ms 600 KB Output is correct
12 Correct 5 ms 604 KB Output is correct
13 Correct 12 ms 1372 KB Output is correct
14 Correct 5 ms 604 KB Output is correct
15 Correct 11 ms 2360 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 604 KB Output is correct
2 Correct 0 ms 604 KB Output is correct
3 Correct 0 ms 604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 600 KB Output is correct
2 Correct 0 ms 604 KB Output is correct
3 Correct 0 ms 604 KB Output is correct
4 Correct 0 ms 604 KB Output is correct
5 Correct 0 ms 604 KB Output is correct
6 Correct 0 ms 604 KB Output is correct
7 Correct 0 ms 604 KB Output is correct
8 Correct 0 ms 604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 600 KB Output is correct
2 Correct 1 ms 604 KB Output is correct
3 Correct 0 ms 604 KB Output is correct
4 Correct 0 ms 604 KB Output is correct
5 Correct 0 ms 604 KB Output is correct
6 Correct 0 ms 604 KB Output is correct
7 Correct 0 ms 600 KB Output is correct
8 Correct 0 ms 604 KB Output is correct
9 Correct 8 ms 1444 KB Output is correct
10 Correct 8 ms 1496 KB Output is correct
11 Correct 3 ms 1116 KB Output is correct
12 Correct 4 ms 1116 KB Output is correct
13 Correct 1 ms 604 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 604 KB Output is correct
2 Correct 0 ms 604 KB Output is correct
3 Correct 0 ms 604 KB Output is correct
4 Correct 0 ms 604 KB Output is correct
5 Correct 0 ms 604 KB Output is correct
6 Correct 1 ms 604 KB Output is correct
7 Correct 0 ms 600 KB Output is correct
8 Correct 0 ms 604 KB Output is correct
9 Correct 11 ms 1496 KB Output is correct
10 Correct 10 ms 1496 KB Output is correct
11 Correct 3 ms 1116 KB Output is correct
12 Correct 7 ms 1116 KB Output is correct
13 Correct 1 ms 604 KB Output is correct
14 Runtime error 10 ms 2392 KB Execution killed with signal 11
15 Halted 0 ms 0 KB -