답안 #785089

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
785089 2023-07-17T04:50:39 Z mindiyak 곤돌라 (IOI14_gondola) C++14
55 / 100
25 ms 2828 KB
#include "gondola.h"
#include <iostream>
#include <unordered_set>
#include <set>

using namespace std;

#define ll long long

ll M = 1e9+9;
int alpha = 1;

int valid(int n, int inputSeq[])
{
  unordered_set <int> broken;
  alpha = 1;
  for(int i=0;i<n;i++){
    if(inputSeq[i] < n){
      alpha = inputSeq[i]-i;
      break;
    }
  }
  // cout << alpha << endl;
  for(int i=0;i<n;i++){
    if(inputSeq[i] > n){
      if(broken.count(inputSeq[i]) != 0){
        // cout << "broken duplicate" << endl;
        return 0;
      }
      broken.insert(inputSeq[i]);
    }else{
      if(i<=(n-alpha)){
        if(inputSeq[i] != (i+alpha)){
          // cout << i << " " << inputSeq[i] << " " << (i+alpha) << endl;
          return 0;
        }
      }else{
        if(inputSeq[i] != (i-(n-alpha))){
          // cout << i << " " << inputSeq[i] << " " << (i-(n-alpha)) << endl;
          return 0;
        }
      }
    }
  }
  return 1;
}

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

int replacement(int n, int gondolaSeq[], int replacementSeq[])
{ 
  set<pair<int,int>> arr;
  int len = 0;
  alpha = 1;
  for(int i=0;i<n;i++){
    if(gondolaSeq[i] <= n){
      alpha = gondolaSeq[i]-i;
      break;
    }
  }
  // cout << alpha << endl;
  for(int i=0;i<n;i++){
    if(gondolaSeq[i] > n){
      if(i<=(n-alpha)){
        arr.insert({gondolaSeq[i],(i+alpha)});
      }else{
        arr.insert({gondolaSeq[i],(i-(n-alpha))});
      }
    } 
  }
  while(arr.size() > 0){
    pair<int,int> a = *arr.begin();
    arr.erase(arr.begin());
    int c = a.first,d = a.second;
    // cout << a.first << " " << a.second << endl;
    replacementSeq[len] = d;
    len++;
    d = n+len;
    if(c!=d){
      arr.insert({c,d});
    }
  }
  return len;
}

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

int countReplacement(int n, int inputSeq[])
{
  if(valid(n,inputSeq) == 0)
    return 0;

  set<pair<int,int>> arr;
  ll len = 1;

  for(int i=0;i<n;i++){
    if(inputSeq[i] > n){
      if(i<=(n-alpha)){
        arr.insert({inputSeq[i],(i+alpha)});
      }else{
        arr.insert({inputSeq[i],(i-(n-alpha))});
      }
    } 
  }

  if(arr.size() == 0)
    return 1;

  while(arr.size() > 0){
    pair<int,int> a = *arr.begin();
    arr.erase(arr.begin());
    int c = a.first,d = a.second;

    len++;
    d = n+len;
    if(c!=d){
      len = ((len%M) * (max((c-d),1)%M))%M;
    }
  }
  return len;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 3 ms 340 KB Output is correct
7 Correct 7 ms 596 KB Output is correct
8 Correct 5 ms 468 KB Output is correct
9 Correct 2 ms 340 KB Output is correct
10 Correct 6 ms 596 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 3 ms 340 KB Output is correct
7 Correct 6 ms 596 KB Output is correct
8 Correct 5 ms 468 KB Output is correct
9 Correct 2 ms 340 KB Output is correct
10 Correct 8 ms 528 KB Output is correct
11 Correct 1 ms 212 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 3 ms 340 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 6 ms 596 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 1 ms 256 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 1 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
4 Correct 1 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 1 ms 212 KB Output is correct
8 Correct 1 ms 340 KB Output is correct
9 Correct 1 ms 340 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 6 ms 596 KB Output is correct
12 Correct 6 ms 568 KB Output is correct
13 Correct 20 ms 2516 KB Output is correct
14 Correct 6 ms 596 KB Output is correct
15 Correct 25 ms 2828 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 232 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -