제출 #430977

#제출 시각아이디문제언어결과실행 시간메모리
430977errorgorn곤돌라 (IOI14_gondola)C++17
100 / 100
42 ms6244 KiB
#include "gondola.h"
#include <unordered_set>
#include <vector>
#include <algorithm>
using namespace std;

const int MOD=1000000009;

long long qexp(long long i,long long j){
    long long res=1;
    while (j){
        if (j&1) res=(res*i)%MOD;
        i=(i*i)%MOD;
        j>>=1;
    }
    return res;
}

int valid(int n, int in[]) {
    unordered_set<int> s;
    for (int x=0;x<n;x++){
        s.insert(in[x]);
    }

    if (s.size()!=n) return 0;

    int pos;
    for (int x=0;x<n;x++){
        if (in[x]<=n){
            pos=x;
            break;
        }
    }

    for (int x=0;x<n;x++){
        if (in[x]<=n && (in[x]-in[pos]+n)%n!=x-pos) return 0;
    }

    return 1;
}

int replacement(int n, int in[], int res[]) {
    int ret=-1;
    int index=-1;

    int pos=0;
    for (int x=0;x<n;x++){
        if (in[x]<=n){
            pos=(in[x]-x+n-1)%n;
            break;
        }
    }

    for (int x=0;x<n;x++){
        if (in[x]>n){
            res[in[x]-n-1]=(x+pos)%n+1;
        }
        if (in[x]>ret){
            ret=in[x];
            index=x;
        }
    }

    index=(index+pos)%n+1;

    for (int x=0;x<ret-n;x++){
        if (res[x]==0){
            res[x]=index;
            index=x+n+1;
        }
    }
    if (ret-n>=0) res[ret-n-1]=index;
    return ret-n;
}

int countReplacement(int n, int in[]) {
    if (!valid(n,in)) return 0;
    vector<int> v;
    long long ans=1;
    v.push_back(n);
    for (int x=0;x<n;x++){
        if (in[x]>n) v.push_back(in[x]);
    }
    sort(v.begin(),v.end());
    reverse(v.begin(),v.end());

    for (int x=1;x<v.size();x++){
        ans=(ans*qexp(x,v[x-1]-v[x]-1))%MOD;
    }

    for (int x=0;x<n;x++) if (in[x]<=n) return ans;
    return (ans*n)%MOD;
}

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

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:25:17: warning: comparison of integer expressions of different signedness: 'std::unordered_set<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   25 |     if (s.size()!=n) return 0;
      |         ~~~~~~~~^~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:87:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   87 |     for (int x=1;x<v.size();x++){
      |                  ~^~~~~~~~~
gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:36:35: warning: 'pos' may be used uninitialized in this function [-Wmaybe-uninitialized]
   36 |         if (in[x]<=n && (in[x]-in[pos]+n)%n!=x-pos) return 0;
      |                                   ^~~
#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...