제출 #1088577

#제출 시각아이디문제언어결과실행 시간메모리
1088577T0p_곤돌라 (IOI14_gondola)C++14
20 / 100
16 ms2772 KiB
#include "gondola.h"
#include <bits/stdc++.h>

using namespace std;

int valid(int n, int inputSeq[]) {
  set<int> st;
  vector<pair<int, int>> v;

  for (int i=0 ; i<n ; i++) {
    if (inputSeq[i] <= n) {
      v.push_back({ inputSeq[i], i });
    }
    else {
      if (st.find(inputSeq[i]) != st.end()) {
        return 0;
      }

      st.insert(inputSeq[i]);
    }
  }

  sort(v.begin(), v.end());
  
  int sz_v = v.size();
  for (int i=0 ; i<sz_v-1 ; i++) {
    if (v[i].first == v[i+1].first) {
      return 0;
    }
    if ((v[i].second + v[i+1].first - v[i].first) % n != v[i+1].second) {
      return 0;
    }
  }

  return 1;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[]) {
  int l = 0, idx_org = -1;
  vector<pair<int, int>> v;
  set<int> st;

  for (int i=0 ; i<n ; i++) {
    st.insert(gondolaSeq[i]);

    if (gondolaSeq[i] <= n) {
      idx_org = i;
      break;
    }
  }

  if (idx_org != -1) {
    int cur_val = gondolaSeq[idx_org] == n
      ? 1 
      : gondolaSeq[idx_org] + 1;

    for (int i=idx_org+1 ; i!=idx_org ; i=(i+1)%n) {
      if (gondolaSeq[i] > n) {
        v.push_back({ cur_val, gondolaSeq[i] });
      }

      cur_val = cur_val == n ? 1 : cur_val + 1;
    }
  }
  else {
    for (int i=0 ; i<n ; i++) {
      v.push_back({ i+1, gondolaSeq[i] });
    }
  }

  sort(v.begin(), v.end(), [](pair<int, int> a, pair<int, int> b) {
    return a.second < b.second;
  });

  int next = n + 1;
  for (pair<int, int> x : v) {
    int cur = x.first, tar = x.second;

    while (cur != tar) {
      replacementSeq[l++] = cur;
      cur = next++;
    }
  }

  return l;
}

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

int countReplacement(int n, int inputSeq[])
{
  return -3;
}
#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...