제출 #818175

#제출 시각아이디문제언어결과실행 시간메모리
818175andecaandeci곤돌라 (IOI14_gondola)C++17
55 / 100
15 ms2292 KiB
#include <bits/stdc++.h>
#include "gondola.h"
using namespace std;

bool vis[250005];

int valid(int n, int inputSeq[])
{
  bool drop = 0;
  int cur = -1;
  for (int i = 0; i < n; i++) {
    if (cur != -1) cur = (cur%n)+1;
    if (vis[inputSeq[i]]) return 0;
    vis[inputSeq[i]] = 1;
    if (inputSeq[i] > n) continue;
    // if (last > inputSeq[i] and drop) return 0;
    // if (last > inputSeq[i]) drop = 1;
    // last = inputSeq[i];
    // cout << cur << endl;
    if (cur == -1) cur = inputSeq[i];
    else if (cur != inputSeq[i]) return 0;
  }
  return 1;
}

//----------------------
vector<pair<int, int>> dif;

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
  // int mx = 0;
  // for (int i = 0; i < n; i++) {
  //   mx = max(mx, gondolaSeq[i]);
  //   vis[gondolaSeq[i]] = 1;
  // }

  // int counter = 0;
  // for (int i = 1; i <= mx; i++) {
  //   if (vis[i]) continue;
  //   replacementSeq[counter] = i;
  //   counter++;
  // }
  // mx -= n;
  // return mx;

  int landasan = -1;
  int idx_landasan = -1;
  for (int i = 0; i < n; i++) {
    if (gondolaSeq[i] <= n) {
      landasan = gondolaSeq[i];
      idx_landasan = i;
      break;
    }
  }

  if (landasan == -1 and idx_landasan == -1) {
    landasan = 1;
    idx_landasan = 0;
  }

  // cout << "landasan : " << idx_landasan << " " << landasan << endl;
  int curi, curdasar = landasan-1;
  for (int i = idx_landasan; i < n+idx_landasan; i++) {
    curi = (i%n);
    curdasar = (curdasar%n)+1;
    if (gondolaSeq[curi] <= n) continue;
    dif.push_back({gondolaSeq[curi], curdasar});
    // cout << curi << " " << curdasar << " " << endl;
  }
  sort(dif.begin(), dif.end());
  // cout << "------" << endl;

  // for (auto i: dif) {
  //   cout << i.first << " " << i.second << endl;
  // }

  int cur = n+1, idx = 0, counter = 0;
  for (int i = 0; i < dif.size(); i++) {
    while (dif[i].second != dif[i].first) {
      replacementSeq[idx] = dif[i].second;
      dif[i].second = cur;
      cur++;
      idx++;
      counter++;
      // cout << dif[i].first << " " << dif[i].second << endl;
    }
  }
  for (auto i: dif) {
    while (i.second != i.first) {
      replacementSeq[idx] = i.second;
      i.second = cur;
      cur++;
      idx++;
      counter++;
    }
  }
  // cout << endl;
  return counter;
}

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

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

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

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:9:8: warning: unused variable 'drop' [-Wunused-variable]
    9 |   bool drop = 0;
      |        ^~~~
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:78:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |   for (int i = 0; i < dif.size(); i++) {
      |                   ~~^~~~~~~~~~~~
#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...