답안 #138705

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
138705 2019-07-30T08:51:35 Z Bohoty 곤돌라 (IOI14_gondola) C++14
75 / 100
117 ms 16632 KB
#include<bits/stdc++.h>
#include "gondola.h"

//#include "grader.cpp"
using namespace std;
const int N = 100 + 5, mod = 1e9 + 9;
int a, b, c, m;
int dp[N][N][N];
long long solve(int x, int y, int z, bool start){
  if (x > a || y > b || z > c)
    return 0;
  if (x == a && y == b && z == c)
    return 1;
  if (~dp[x][y][z])
    return dp[x][y][z];
  int n_x, n_y, n_z;
  if (start)
    n_x = n_y = n_z= m + 1;
  else
    n_x = n_y = n_z = max(max(x, y), z) + 1;
  return dp[x][y][z] = (solve(n_x, y, z, 0)
  +  solve(x, n_x, z, 0)
  + solve(x, y, n_x, 0)) % mod;
}
int valid(int n, int inputSeq[]){
  int mn = 1e9;
  int idx = -1;
  map < int, int > mp;
  for(int i = 0 ; i < n ; i++){
    mp[inputSeq[i]]++;
    if (inputSeq[i] < mn){
      mn = inputSeq[i], idx = i;
    }
  }
  for(auto it :mp){
    if (it.second > 1)
    return 0;
  }
  int intended = mn;
  if (intended > n)
    return 1;
  for(int i = 0 ; i < n ; i++){
    int cur = inputSeq[(i + idx) % n];
    if (cur != intended){
      if (cur <= n)
        return 0;
    }
    intended++;
    if (intended > n)
    intended -= n;
  }
  return 1;
}
int replacement(int n, int gondolaSeq[], int replacementSeq[]){
  int mn = 1e9;
  int idx = -1;
  set < int > st, elements;
  int f[250001], now[250001];
  memset(f,0,sizeof f);
  memset(now,0,sizeof now);
  for(int i = 0 ; i < 250001 ; i++)
    now[i] = i;
  for(int i = n + 1 ; i <= 250000 ; i++)
    st.insert(i);
  map < int, int > mp;
  for(int i = 0 ; i < n ; i++){
    if (gondolaSeq[i] < mn){
      mn = gondolaSeq[i], idx = i;
    }
  }
  int intended = mn;
  if (intended > n)
    intended = 1;
  for(int i = 0 ; i < n ; i++){
    int cur = gondolaSeq[(i + idx) % n];
    if (cur != intended){
        mp[intended] = cur;
        f[cur] = intended;
        elements.insert(intended);
    }
    intended++;
    if (intended > n)
    intended -= n;
  }
  int j = 0;
  for(auto &it :st){
    if (elements.empty())
      break;
    if (f[it]){
      int z = now[f[it]];
      replacementSeq[j++] = z;
      elements.erase(f[it]);
    }
    else {
      int z = *elements.begin();
      replacementSeq[j] = now[z];
      now[z] = it;
      j++;
    }
  }
  return j;
}
int countReplacement(int n, int inputSeq[]){
  if (!valid(n, inputSeq))
    return 0;
  a= b= c= m = 0;
  memset(dp, -1, sizeof dp);
  int mn = 4e9;
  int idx = -1;
  int mx = 0;
  for(int i = 0 ; i < n ; i++){
    if (inputSeq[i] < mn){
      mn = inputSeq[i], idx = i;
    }
    mx = max(mx, inputSeq[i]);
  }
  if (mx == n)
    return 1;
  int intended = mn;
  if (intended > n)
    intended = 1;
  vector < pair < int, int > > v;
  for(int i = 0 ; i < n ; i++){
    int cur = inputSeq[(i + idx) % n];
    if (cur != intended){
        v.push_back({cur, intended});
    }
    intended++;
    if (intended > n)
    intended -= n;
  }
  m = n;
  int x, y, z;
  x = y = z = 0;
  if (v.size()){
    x = v[0].second;
    a = v[0].first;
  }
  if (v.size() > 1){
    y = v[1].second;
    b = v[1].first;
  }
  if (v.size() > 2){
    z = v[2].second;
    c = v[2].first;
  }
  return solve(x, y, z, 1);
}

Compilation message

gondola.cpp: In function 'int countReplacement(int, int*)':
gondola.cpp:108:12: warning: overflow in implicit constant conversion [-Woverflow]
   int mn = 4e9;
            ^~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 256 KB Output is correct
5 Correct 2 ms 256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 256 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 376 KB Output is correct
5 Correct 2 ms 420 KB Output is correct
6 Correct 16 ms 2168 KB Output is correct
7 Correct 38 ms 3700 KB Output is correct
8 Correct 29 ms 4032 KB Output is correct
9 Correct 10 ms 1528 KB Output is correct
10 Correct 37 ms 4472 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 256 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 2 ms 380 KB Output is correct
5 Correct 2 ms 256 KB Output is correct
6 Correct 16 ms 2296 KB Output is correct
7 Correct 38 ms 3648 KB Output is correct
8 Correct 29 ms 3960 KB Output is correct
9 Correct 10 ms 1400 KB Output is correct
10 Correct 37 ms 4476 KB Output is correct
11 Correct 2 ms 376 KB Output is correct
12 Correct 2 ms 376 KB Output is correct
13 Correct 22 ms 2040 KB Output is correct
14 Correct 2 ms 376 KB Output is correct
15 Correct 60 ms 4652 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 86 ms 14016 KB Output is correct
2 Correct 86 ms 13992 KB Output is correct
3 Correct 85 ms 13944 KB Output is correct
4 Correct 87 ms 14200 KB Output is correct
5 Correct 86 ms 13944 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 86 ms 14044 KB Output is correct
2 Correct 86 ms 14060 KB Output is correct
3 Correct 87 ms 14064 KB Output is correct
4 Correct 87 ms 13968 KB Output is correct
5 Correct 93 ms 14000 KB Output is correct
6 Correct 86 ms 14072 KB Output is correct
7 Correct 87 ms 13944 KB Output is correct
8 Correct 86 ms 14200 KB Output is correct
9 Correct 90 ms 14132 KB Output is correct
10 Correct 86 ms 14072 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 87 ms 13984 KB Output is correct
2 Correct 86 ms 14048 KB Output is correct
3 Correct 85 ms 14072 KB Output is correct
4 Correct 92 ms 14028 KB Output is correct
5 Correct 95 ms 14028 KB Output is correct
6 Correct 85 ms 13944 KB Output is correct
7 Correct 91 ms 14048 KB Output is correct
8 Correct 88 ms 14072 KB Output is correct
9 Correct 86 ms 14200 KB Output is correct
10 Correct 86 ms 14072 KB Output is correct
11 Correct 68 ms 10608 KB Output is correct
12 Correct 65 ms 10104 KB Output is correct
13 Correct 116 ms 16052 KB Output is correct
14 Correct 68 ms 10616 KB Output is correct
15 Correct 117 ms 16632 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 4856 KB Output is correct
2 Correct 6 ms 4984 KB Output is correct
3 Correct 6 ms 4856 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 4856 KB Output is correct
2 Correct 6 ms 4984 KB Output is correct
3 Correct 6 ms 4856 KB Output is correct
4 Correct 6 ms 4856 KB Output is correct
5 Correct 6 ms 4800 KB Output is correct
6 Correct 6 ms 4856 KB Output is correct
7 Correct 8 ms 4860 KB Output is correct
8 Correct 7 ms 4860 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 4856 KB Output is correct
2 Correct 6 ms 4856 KB Output is correct
3 Correct 6 ms 4856 KB Output is correct
4 Correct 6 ms 4856 KB Output is correct
5 Correct 7 ms 4856 KB Output is correct
6 Correct 6 ms 4856 KB Output is correct
7 Correct 8 ms 4900 KB Output is correct
8 Correct 6 ms 4856 KB Output is correct
9 Runtime error 80 ms 11772 KB Execution killed with signal 11 (could be triggered by violating memory limits)
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 4856 KB Output is correct
2 Correct 6 ms 4984 KB Output is correct
3 Correct 6 ms 4848 KB Output is correct
4 Correct 6 ms 4856 KB Output is correct
5 Correct 6 ms 4856 KB Output is correct
6 Correct 6 ms 4856 KB Output is correct
7 Correct 8 ms 4860 KB Output is correct
8 Correct 6 ms 4856 KB Output is correct
9 Runtime error 59 ms 11876 KB Execution killed with signal 11 (could be triggered by violating memory limits)
10 Halted 0 ms 0 KB -