답안 #1034734

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1034734 2024-07-25T17:21:11 Z ArthuroWich 곤돌라 (IOI14_gondola) C++17
75 / 100
29 ms 5956 KB
#include "gondola.h"
#include <bits/stdc++.h>
using namespace std;
int valid(int n, int gondolaSeq[]) {
    int mi = INT_MAX, ind = -1;
    set<int> c;
    for (int i = 0; i < n; i++) {
        c.insert(gondolaSeq[i]);
        if (mi > gondolaSeq[i]) {
            mi = gondolaSeq[i];
            ind = i;
        }
    }
    if (c.size() < n) {
        return 0;
    }
    if (mi > n) {
        return 1;
    }
    ind -= (mi-1);
    ind += n;
    ind %= n;
    vector<int> a;
    for (int i = ind; i < n; i++) {
        a.push_back(gondolaSeq[i]);
    }
    for (int i = 0; i < ind; i++) {
        a.push_back(gondolaSeq[i]);
    }
    for (int i = 0; i < n; i++) {
        if (a[i] <= n && a[i] != i+1) {
            return 0;
        }
    }
    return 1;
}
int replacement(int n, int gondolaSeq[], int replacementSeq[]) {
    int mi = INT_MAX, ind = -1, ma = 0;
    set<int> c;
    for (int i = 0; i < n; i++) {
        ma = max(ma, gondolaSeq[i]);
        c.insert(gondolaSeq[i]);
        if (mi > gondolaSeq[i]) {
            mi = gondolaSeq[i];
            ind = i;
        }
    }
    vector<pair<int, int>> num;
    if (ma <= n) {
        return 0;
    }
    if (mi > n) {
        for (int i = 0; i < n; i++) {
            num.push_back({gondolaSeq[i], i+1});
        }
        int l = 0;
        sort(num.begin(), num.end());
        l = num.back().first-n;
        for (int i = 0; i < l; i++) {
            replacementSeq[i] = num.back().second;
        }
        for (int i = 0; i < num.size(); i++) {
            replacementSeq[num[i].first-n-1] = num[i].second;
        }
        vector<int> ans(n+1, 0);
        for (int i = 1; i <= n; i++) {
            ans[i] = i;
        }
        for (int i = 0; i < l; i++) {
            int v = replacementSeq[i];
            replacementSeq[i] = ans[replacementSeq[i]];
            ans[v] = n+i+1;
        }
        return l;
    } else {
        ind -= (mi-1);
        ind += n;
        ind %= n;
        vector<int> a;
        for (int i = ind; i < n; i++) {
            a.push_back(gondolaSeq[i]);
        }
        for (int i = 0; i < ind; i++) {
            a.push_back(gondolaSeq[i]);
        }
        for (int i = 0; i < n; i++) {
            if (a[i] > n) {
               num.push_back({a[i], i+1});
            }
        }
        int l = 0;
        sort(num.begin(), num.end());
        l = num.back().first-n;
        for (int i = 0; i < l; i++) {
            replacementSeq[i] = num.back().second;
        }
        for (int i = 0; i < num.size(); i++) {
            replacementSeq[num[i].first-n-1] = num[i].second;
        }
        vector<int> ans(n+1, 0);
        for (int i = 1; i <= n; i++) {
            ans[i] = i;
        }
        for (int i = 0; i < l; i++) {
            int v = replacementSeq[i];
            replacementSeq[i] = ans[replacementSeq[i]];
            ans[v] = n+i+1;
        }
        return l;
    }
}
int countReplacement(int n, int gondolaSeq[]) {
    if (!valid(n, gondolaSeq)) {
        return 0;
    }
    vector<int> num;
    int ma = 0, mod = 1000000009;
    long long int ans = 1;
    for (int i = 0; i < n; i++) {
        if (gondolaSeq[i] > n) {
            num.push_back(gondolaSeq[i]);
        }
    }
    if (num.size() == 0) {
        return ans;
    }
    sort(num.rbegin(), num.rend());
    int l = n+1;
    while(num.size() > 1) {
        if (num.back() == l) {
            num.pop_back();
            l++;
        } else {
            ans *= num.size();
            ans %= mod;
            l++;
        }
    }
    return ans;
}

Compilation message

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:14:18: warning: comparison of integer expressions of different signedness: 'std::set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   14 |     if (c.size() < n) {
      |         ~~~~~~~~~^~~
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:62:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |         for (int i = 0; i < num.size(); i++) {
      |                         ~~^~~~~~~~~~~~
gondola.cpp:97:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   97 |         for (int i = 0; i < num.size(); i++) {
      |                         ~~^~~~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:117:9: warning: unused variable 'ma' [-Wunused-variable]
  117 |     int ma = 0, mod = 1000000009;
      |         ^~
# 결과 실행 시간 메모리 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 344 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 1 ms 348 KB Output is correct
6 Correct 8 ms 2908 KB Output is correct
7 Correct 20 ms 4160 KB Output is correct
8 Correct 14 ms 5080 KB Output is correct
9 Correct 5 ms 1884 KB Output is correct
10 Correct 18 ms 5848 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 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 10 ms 2808 KB Output is correct
7 Correct 21 ms 4068 KB Output is correct
8 Correct 14 ms 5080 KB Output is correct
9 Correct 5 ms 1880 KB Output is correct
10 Correct 21 ms 5664 KB Output is correct
11 Correct 0 ms 348 KB Output is correct
12 Correct 0 ms 348 KB Output is correct
13 Correct 10 ms 2840 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 24 ms 5956 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
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 344 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 1 ms 448 KB Output is correct
7 Correct 1 ms 348 KB Output is correct
8 Correct 1 ms 348 KB Output is correct
9 Correct 0 ms 348 KB Output is correct
10 Correct 1 ms 344 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 344 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 0 ms 348 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 15 ms 4700 KB Output is correct
12 Correct 17 ms 5488 KB Output is correct
13 Correct 15 ms 3164 KB Output is correct
14 Correct 15 ms 4700 KB Output is correct
15 Correct 15 ms 3060 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 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 448 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 444 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 0 ms 348 KB Output is correct
9 Correct 29 ms 5292 KB Output is correct
10 Correct 27 ms 4336 KB Output is correct
11 Correct 8 ms 1880 KB Output is correct
12 Correct 9 ms 2140 KB Output is correct
13 Incorrect 3 ms 752 KB Output isn't correct
14 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 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 444 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 352 KB Output is correct
9 Correct 27 ms 5080 KB Output is correct
10 Correct 21 ms 4188 KB Output is correct
11 Correct 8 ms 1860 KB Output is correct
12 Correct 9 ms 2240 KB Output is correct
13 Incorrect 3 ms 604 KB Output isn't correct
14 Halted 0 ms 0 KB -