답안 #111161

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
111161 2019-05-14T00:38:46 Z IVIosab 곤돌라 (IOI14_gondola) C++17
컴파일 오류
0 ms 0 KB
#include <bits/stdc++.h>
//#include "gondola.h"

using namespace std;
int MOD = 1e9 + 9;

long long fast_power(long long base, long long power) {
    long long result = 1;
    while (power > 0) {
        if (power % 2 == 1) {
            result = (result * base) % MOD;
        }
        base = (base * base) % MOD;
        power = power / 2;
    }
    return result;
}

int mp[250005];

int valid(int n, int inputSeq[]) {
    int fx = 0, ind = 0, val = 0;
    for (int i = 0; i < n; i++) {
        int x = inputSeq[i];
        if (mp[x] == 1) {
            return 0;
        }
        mp[x] = 1;
        if (x > n) {
            fx++;
        }
        if (x <= n) {
            ind = i;
            val = x;
        }
    }
    if (fx == n) {
        return 1;
    }
    for (int i = ind; i < ind + n; i++) {
        int x = inputSeq[i % n];
        if (x > n) {
            inputSeq[i % n] = val;
        } else {
            if (x != val) {
                return 0;
            }
        }
        val++;
        if (val > n) {
            val = 1;
        }
    }
    return 1;
}

int ar[250005];

int replacement(int n, int gondolaSeq[], int replacementSeq[]) {
    int mx = 0;
    int ind = -1, val = 0;
    for (int i = 0; i < n; i++) {
        int x = gondolaSeq[i];
        mx = max(mx, x);
        if (x <= n) {
            val = x;
            ind = i;
        }
    }
    if (ind == -1) {
        ind = 0;
        val = 1;
    }
    for (int i = ind; i < ind + n; i++) {
        ar[i % n] = val;
        val++;
        if (val > n) {
            val = 1;
        }
    }
    int hg = n + 1;
    priority_queue<pair<int, int>> pq;
    for (int i = 0; i < n; i++) {
        if (gondolaSeq[i] > n)
            pq.push({(-1) * gondolaSeq[i], ar[i]});
    }
    int cnt = 0;
    while (!pq.empty()) {
        pair<int, int> pr = pq.top();
        pq.pop();
        replacementSeq[cnt] = pr.second;
        cnt++;
        for (hg; hg < pr.first * (-1); hg++) {
            replacementSeq[cnt] = hg;
            cnt++;
        }
        hg++;
    }
    return cnt;
}

int countReplacement(int n, int inputSeq[]) {
    int mx = 0,mn=1e9+5;
    long long ret = 1;
    vector<int> flex;
    flex.push_back(-1);
    int fx = 0;
    for (int i = 0; i < n; i++) {
        int x = inputSeq[i];
        mx = max(mx, x);
        mn = min(mn, x);
        if (x > n) {
            fx++;
            flex.push_back(x - n);
        }
    }
    int val = valid(n, inputSeq);
    if (val) {
        if (mx == n) {
            return 1;
        }
    } else {
        return 0;
    }
    int mul = flex.size() - 1;
    sort(flex.begin(), flex.end());
    for (int i = 1; i < flex.size(); i++) {
        int x = flex[i - 1] + 1;
        ret *= fast_power(mul, ((flex[i] - x) - 1));
        ret %= MOD;
    }
    if(fx==n){
        ret*=fx;
        ret%=MOD;
    }
    return ret % MOD;
}

Compilation message

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:93:16: warning: statement has no effect [-Wunused-value]
         for (hg; hg < pr.first * (-1); hg++) {
                ^
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:127:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 1; i < flex.size(); i++) {
                     ~~^~~~~~~~~~~~~
/tmp/ccxV9jOU.o: In function `main':
grader.cpp:(.text.startup+0xc3): undefined reference to `countReplacement'
grader.cpp:(.text.startup+0xe2): undefined reference to `valid'
grader.cpp:(.text.startup+0x106): undefined reference to `replacement'
collect2: error: ld returned 1 exit status