제출 #584761

#제출 시각아이디문제언어결과실행 시간메모리
584761jack715곤돌라 (IOI14_gondola)C++14
60 / 100
18 ms2208 KiB
#include "gondola.h"
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define pp pop_back
#define mp make_pair
#define bb back
#define ff first
#define ss second

using namespace std;

void rotatek(vector<int>& nums, int k) {
  vector<int> cp = nums;
  int n = nums.size(); 
  for (int i = 0; i < n; i++)
    nums[i] = cp[(i+k)%n];
}

int valid(int n, int inputSeq[])
{
  vector<int> nums(n);
  for (int i = 0; i < n; i++) nums[i] = inputSeq[i];
  for (int i = 0; i < n; i++) {
    if (nums[i] <= n) {
      rotatek(nums, (i-nums[i]+1+n)%n);
      break;
    }
  }

  vector<int> rem;
  for (int i = 0; i < n; i++) {
    if (nums[i] <= n && nums[i] != i+1) return 0;
    if (nums[i] > n) rem.pb(nums[i]);
  }
  sort(rem.begin(), rem.end());
  for (int i = 1; i < rem.size(); i++) {
    if (rem[i] != rem[i-1]+1) return 0;
  }
  return 1;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{
  vector<int> nums(n);
  vector<pair<int, int> > rem;

  for (int i = 0; i < n; i++) 
    nums[i] = gondolaSeq[i];  

  for (int i = 0; i < n; i++) {
    if (nums[i] <= n) {
      rotatek(nums, (i-nums[i]+1+n)%n);
      break;
    }
  }

  for (int i = 0; i < n; i++) {
    if (nums[i] > n) {
      rem.pb({nums[i], i+1});
    }
  }

  sort(rem.begin(), rem.end());
  int now, next = n+1, ans = 0;
  for (int i = 0; i < rem.size(); i++) {
    now = rem[i].ss;
    while (now < rem[i].ff) {
      replacementSeq[ans] = now;
      now = next, next++;
      ans++;
    }
  } 
  return ans;
}

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

int countReplacement(int n, int inputSeq[])
{
  int MOD = 1e9+9;
  vector<int> nums(n), rem;

  for (int i = 0; i < n; i++) 
    nums[i] = inputSeq[i];  

  for (int i = 0; i < n; i++) {
    if (nums[i] <= n) {
      rotatek(nums, (i-nums[i]+1+n)%n);
      break;
    }
  }

  int high = 1;
  for (int i = 0; i < n; i++) {
    if (nums[i] > n)  
      rem.pb(nums[i]);
    else {
      high = 0;
      if (nums[i] != i+1)
        return 0;
    }
  }

  sort(rem.begin(), rem.end());
  int now = n+1, ans = 1, mult = rem.size();
  for (int i = 0; i < rem.size(); i++) {
    while(now < rem[i]) {
      ans = (ans*mult)%MOD;
      now++;
    }
    now++, mult--;
  }
  if (high)
    ans = (ans*n)%MOD;
  return ans;
}

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

gondola.cpp: In function 'int valid(int, int*)':
gondola.cpp:37:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   37 |   for (int i = 1; i < rem.size(); i++) {
      |                   ~~^~~~~~~~~~~~
gondola.cpp: In function 'int replacement(int, int*, int*)':
gondola.cpp:68: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]
   68 |   for (int i = 0; i < rem.size(); i++) {
      |                   ~~^~~~~~~~~~~~
gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:109:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  109 |   for (int i = 0; i < rem.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...