답안 #48742

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
48742 2018-05-18T13:02:53 Z doowey 곤돌라 (IOI14_gondola) C++14
20 / 100
16 ms 2172 KB
#include <bits/stdc++.h>
#include "gondola.h"

using namespace std;
typedef pair<int,int> pii;

#define fi first
#define se second
#define mp make_pair

const int N = (int)25e4 + 1293;

int valid(int n, int inputSeq[])
{
  int cnt[N];
  for(int j = 0;j < N;j ++ )
    cnt[j] = 0;
  int rest[n];
  int maz = (int)4e5 + 12345;
  for(int i = 0; i < n;i ++){
    cnt[inputSeq[i]]++;
    if(cnt[inputSeq[i]] >= 2)
      return 0;
    maz = min(maz, inputSeq[i]);
    rest[i] = inputSeq[i];
  }
  if(maz > n)
    return 1;
  int p,j;
  for(int i = 0;i < n;i ++ ){
    if(rest[i] <= n){
      p = rest[i]+1;
      j = i+1;
      j %= N;
      while(p <= n){
        rest[j] = p;
        p++;
        j++;
        j%=n;
      }
      p = 1;
      while(p < rest[i]){
        rest[j] = p;
        j++;
        j %= n;
        p++;
      }
      break;
    }
  }
  for(int i = 0; i < n;i ++){
    if(inputSeq[i] <= n){
      if(rest[i] != inputSeq[i])
        return 0;
    }
  }
  return 1;
}

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

int replacement(int n, int gondolas[], int replacementSeq[])
{
  bool ok = false;
  for(int i = 0;i < n;i ++)
    if(gondolas[i] <= n)
      ok = true;
  if(!ok){
    int sz = 0;
    for(int i = 1;i <= n;i ++){
      replacementSeq[sz] = i;
      sz++;
    }  
    int ii = n + 1;
    sort(gondolas,gondolas + n);
    for(int j = 0;j < n;j ++ ){
      while(ii < gondolas[j]){
        replacementSeq[sz] = ii;
        sz++; 
        ii++;
      }
      ii = gondolas[j] + 1;
    }
    return sz;
  }
  int original[n];
  int p,ls;
  for(int i = 0;i < n;i ++){
    if(gondolas[i] <= n){
      original[i] = gondolas[i];
      ls = original[i] + 1;
      p = i + 1;
      while(ls <= n){
        original[p] = ls;
        ls++;
        p ++;
        p %= n;
      }
      ls = 1;
      while(ls < gondolas[i]){
        original[p] = ls; 
        p++;
        p %= n;
        ls++;
      }
    }
  }
  vector<pii>sq;
  int sz = 0;
  int ii = n + 1;
  for(int i = 0;i < n; i ++){
    if(original[i] < gondolas[i]) 
      sq.push_back(mp(gondolas[i],i));
  }
  sort(sq.begin(),sq.end());
  for(auto x : sq){
    while(original[x.se] < gondolas[x.se]){
      replacementSeq[sz] = original[x.se];
      original[x.se] = ii;
      sz++;
      ii++;
    } 
  }
  return sz;
}

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

int countReplacement(int n, int inputSeq[])
{
  return -3;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1272 KB Output is correct
2 Correct 2 ms 1384 KB Output is correct
3 Correct 2 ms 1436 KB Output is correct
4 Correct 3 ms 1512 KB Output is correct
5 Correct 3 ms 1512 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1512 KB Output is correct
2 Correct 3 ms 1512 KB Output is correct
3 Correct 2 ms 1588 KB Output is correct
4 Correct 3 ms 1612 KB Output is correct
5 Correct 2 ms 1612 KB Output is correct
6 Correct 8 ms 1884 KB Output is correct
7 Correct 15 ms 1916 KB Output is correct
8 Correct 12 ms 2044 KB Output is correct
9 Correct 6 ms 2044 KB Output is correct
10 Correct 14 ms 2172 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 2172 KB Output is correct
2 Correct 3 ms 2172 KB Output is correct
3 Correct 3 ms 2172 KB Output is correct
4 Correct 3 ms 2172 KB Output is correct
5 Correct 2 ms 2172 KB Output is correct
6 Correct 9 ms 2172 KB Output is correct
7 Correct 14 ms 2172 KB Output is correct
8 Correct 12 ms 2172 KB Output is correct
9 Correct 6 ms 2172 KB Output is correct
10 Correct 14 ms 2172 KB Output is correct
11 Correct 2 ms 2172 KB Output is correct
12 Correct 2 ms 2172 KB Output is correct
13 Correct 9 ms 2172 KB Output is correct
14 Correct 3 ms 2172 KB Output is correct
15 Correct 16 ms 2172 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2172 KB Output is correct
2 Incorrect 2 ms 2172 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2172 KB Output is correct
2 Incorrect 2 ms 2172 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 2172 KB Output is correct
2 Incorrect 2 ms 2172 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 2172 KB Integer -3 violates the range [0, 1000000008]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 2172 KB Integer -3 violates the range [0, 1000000008]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 2172 KB Integer -3 violates the range [0, 1000000008]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 2172 KB Integer -3 violates the range [0, 1000000008]
2 Halted 0 ms 0 KB -