제출 #428450

#제출 시각아이디문제언어결과실행 시간메모리
428450markthitrin곤돌라 (IOI14_gondola)C++14
55 / 100
49 ms4624 KiB
#include "gondola.h"
#include <map>
#include <queue>
class name {
public:
    int value;
    int base;
    bool operator<(const name& b) const{
        return value > b.value;
    }
    void operator=(const name& b){
        value = b.value;
        base = b.base;
    }
}put_in;
int valid(int n, int inputSeq[])
{
    std::map<int,bool> g;
    int max = 0;
    int find_min = 2000000000;
    int min_pos = 0;
    for(int q = 0 ;q<n;q++){
        if(g[inputSeq[q]])
            return 0;
        g[inputSeq[q]] = true;
        if(find_min > inputSeq[q]){
            find_min = inputSeq[q];
            min_pos = q;
        }
    }
    if(find_min > n)
        return 1;
    int last_pos = min_pos - find_min;
    for(int q = min_pos;q < min_pos + n;q++){
        if(max < inputSeq[q % n] && inputSeq[q % n] <= n){
            if(inputSeq[q % n] - max != q - last_pos)
                return 0;
            max = inputSeq[q % n];
            inputSeq[q % n] = 2000000000;
            last_pos = q;
        }
    }
    for(int q = 0 ;q<n;q++){
        if(inputSeq[q] <= n)
        return 0;
    }
    return 1;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
    std::priority_queue<name> g;
    int max = 0;
    for(int q = 0 ;q<n;q++){
        max = std::max(max,gondolaSeq[q]);
    }
    int find_min = 2000000000;
    int min_pos;
    for(int q = 0 ;q<n;q++){
        if(find_min > gondolaSeq[q]){
            find_min = gondolaSeq[q];
            min_pos = q;
        }
    }
    if(find_min > n)
        min_pos = 0;
    else {
        min_pos -= find_min - 1;
        if(min_pos < 0) min_pos += n;
    }
    for(int q = min_pos;q<min_pos + n;q++){
        put_in.value = gondolaSeq[q % n];
        put_in.base = q + 1 - min_pos;
        g.push(put_in);
    }
    int cnt = 0;
    int last_value = n;
    while(!g.empty()){
        put_in = g.top();
        g.pop();
        if(put_in.value <= n)
            continue;
        replacementSeq[cnt++] = put_in.base;
        for(int q = last_value + 1;q<put_in.value;q++){
            replacementSeq[cnt++] = q;
        }
        last_value = put_in.value;
    }
    return cnt;
}

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

int countReplacement(int n, int inputSeq[])
{
  return -3;
}

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

gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:70:17: warning: 'min_pos' may be used uninitialized in this function [-Wmaybe-uninitialized]
   70 |         min_pos -= find_min - 1;
      |         ~~~~~~~~^~~~~~~~~~~~~~~
#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...