제출 #1198072

#제출 시각아이디문제언어결과실행 시간메모리
1198072njoop곤돌라 (IOI14_gondola)C++20
컴파일 에러
0 ms0 KiB
#include "gondola.h"
#include <bits/stdc++.h>

using namespace std;

long long mod = 1e9+9;

long long poww(long long b, long long e) {
  if(e == 0) return 1;
  if(e == 1) return b;
  long long t = poww(b, e/2);
  t *= t;
  t %= mod;
  t *= poww(b, e%2);
  t %= mod;
  return t;
}

int valid(int n, int inputSeq[]) {
  int st=0, mn=1e9;
  vector<int> v;
  for(int i=0; i<n; i++) {
    v.push_back(inputSeq[i]);
    if(inputSeq[i] <= n && inputSeq[i] < mn) {
      mn = inputSeq[i];
      st = i;
    }
  }
  sort(v.begin(), v.end());
  for(int i=1; i<n; i++) {
    if(v[i] == v[i-1]) return 0;
  }
  if(mn == 1e9) return 1;
  for(int i=st; i<n; i++) {
    if(inputSeq[i] <= n && inputSeq[i] != mn) return 0;
    mn++;
  }
  for(int i=0; i<st; i++) {
    if(inputSeq[i] <= n && inputSeq[i] != mn) return 0;
    mn++;
  }
  return 1;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[]) {
  int oriSeq[n], pos=1, val=1, idx=0;
  priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
  priority_queue<int> avai;
  map<int, int> mp;
  for(int i=0; i<n; i++) {
    if(gondolaSeq[i] <= n) {
      pos = i;
      val = gondolaSeq[i];
    } else {
      pq.push({gondolaSeq[i], i});
      avai.push(i);
    }
  }
  for(int i=pos; i<n; i++) {
    oriSeq[i] = val;
    val++;
    if(val > n) val -= n;
  }
  for(int i=0; i<pos; i++) {
    oriSeq[i] = val;
    val++;
    if(val > n) val -= n;
  }
  for(int i=n+1; pq.size(); i++) {
    if(i == pq.top().first) {
      replacementSeq[idx] = oriSeq[pq.top().second];
      oriSeq[pq.top().second] = i;
      pq.pop();
      idx++;
      mp[pq.top().second] = 1;
    } else {
      while(avai.size() && mp[avai.top()]) avai.pop();
      if(avai.empty()) return idx;
      replacementSeq[idx] = oriSeq[avai.top()];
      oriSeq[avai.top()] = i;
      idx++;
    }
  }
  return idx;
}

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

int countReplacement(int n, int inputSeq[]) {
  int avai=0;
  vector<int> ra;
  if(valid(n, inputSeq) == 0) return 0; 
  long long ans = 1;
  ra.push_back(n);
  for(int i=0; i<n; i++) {
    if(inputSeq[i] > n) {
      ra.push_back(inputSeq[i]);
      avai++;
    }
  }
  if(ra.size() == n+1) {
    ans *= n;
    ans %= mod;
  }
  sort(ra.begin(), ra.end());
  for(int i=1; i<ra.size(); i++) {
    int rem = ra[i]-ra[i-1];
    if(rem != 0 && ra.size()-i-1 != 0) ans *= poww(rem, ra.size()-i-1);
    ans %= mod;
  }
  return ans;
}

int main() {
  int n;
  cin >> n;
  int inputSeq[n];
  for(int i=0; i<n; i++) {
    cin >> inputSeq[i];
  }
  cout << countReplacement(n, inputSeq);
}

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

/usr/bin/ld: /tmp/cc1lIxkl.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccaB4th0.o:gondola.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status