답안 #626839

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
626839 2022-08-11T21:32:18 Z dnialh 송신탑 (IOI22_towers) C++17
0 / 100
4000 ms 15108 KB
#include <vector>
#include <map>
#include <set>
#include <iostream>

#define map std::map
#define set std::set

#define vector std::vector
#define vi vector<int>

#define ll long long
#define pb push_back
#define vll vector<ll>


int fd = -1;
int n;

vi heights;
vector<vi> steppers;

void init(int N, vector<int> H){
  n = N;
  heights = H;
}

void compute(int d){
  vi nhi(n + 1, n);

  int best = -1;
  int vb = -1;
  int last = n;

  for (int i = n - 1; i >= 0; i--){
    int v = heights[i];

    if (v > vb){
      best = i;
      vb = v;
    }

    if (vb >= v + d){
      last = best;
      best = -1;
      vb = -1;

      for (int j = i; j < last; j++){
        if (heights[j] >= heights[i] + d){
          last = j;
          break;
        } 
      }
    }

    nhi[i] = last;
    //std::cout << "nhi " << i << " " << last << std::endl; 
  }

  vi nlo(n + 1, n);

  ll lbest = -1;
  ll lvb = -1;
  int llast = n;

  for (int i = n - 1; i >= 0; i--){
    ll v = 15e8 - heights[i];

    if (v > lvb){
      lbest = i;
      lvb = v;
    }

    if (lvb >= v + d){
      llast = lbest;
      lbest = -1;
      lvb = -1;

      for (int j = i; j < llast; j++){
        if (heights[i] >= heights[j] + d){
          llast = j;
          break;
        } 
      }
    }

    nlo[i] = llast;
  }

  steppers = vector<vi>();

  vi first;
  for (int i = 0; i <= n; i++){
    first.pb(nlo[nhi[i]]);
  }

  steppers.pb(first);

  for (int j = 0; j < 30; j++){
    vi nex;
    vi curr = steppers[j];

    for (int i = 0; i <= n; i++){
      nex.pb(curr[curr[i]]);
    }

    steppers.pb(nex);
  }

  //std::cout << steppers.size() << std::endl;
}

int max_towers(int L, int R, int D){
  if (D != fd){
    compute(D);
    fd = D;
  }

  int out = 1;
  int curr = L;

  for (int j = 29; j >= 0; j--){
    //std::cout << j << " " << out << " " << curr << std::endl;
    int att = steppers[j][curr];
    if (att <= R){
      out += (1 << j);
      curr = att;
    }
  }

  return out;
}

/*
7 3
10 20 60 40 50 30 70
1 5 10
2 2 100
0 6 17
*/
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 4013 ms 10012 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 336 KB Output is correct
2 Correct 2 ms 592 KB Output is correct
3 Correct 1 ms 592 KB Output is correct
4 Correct 1 ms 592 KB Output is correct
5 Correct 1 ms 592 KB Output is correct
6 Correct 1 ms 592 KB Output is correct
7 Correct 1 ms 528 KB Output is correct
8 Correct 1 ms 592 KB Output is correct
9 Correct 1 ms 592 KB Output is correct
10 Correct 2 ms 592 KB Output is correct
11 Correct 1 ms 592 KB Output is correct
12 Incorrect 1 ms 208 KB 1st lines differ - on the 1st token, expected: '2', found: '1'
13 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 336 KB Output is correct
2 Correct 2 ms 592 KB Output is correct
3 Correct 1 ms 592 KB Output is correct
4 Correct 1 ms 592 KB Output is correct
5 Correct 1 ms 592 KB Output is correct
6 Correct 1 ms 592 KB Output is correct
7 Correct 1 ms 528 KB Output is correct
8 Correct 1 ms 592 KB Output is correct
9 Correct 1 ms 592 KB Output is correct
10 Correct 2 ms 592 KB Output is correct
11 Correct 1 ms 592 KB Output is correct
12 Incorrect 1 ms 208 KB 1st lines differ - on the 1st token, expected: '2', found: '1'
13 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 874 ms 15108 KB 14th lines differ - on the 1st token, expected: '16602', found: '16601'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 4065 ms 4464 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 336 KB Output is correct
2 Correct 2 ms 592 KB Output is correct
3 Correct 1 ms 592 KB Output is correct
4 Correct 1 ms 592 KB Output is correct
5 Correct 1 ms 592 KB Output is correct
6 Correct 1 ms 592 KB Output is correct
7 Correct 1 ms 528 KB Output is correct
8 Correct 1 ms 592 KB Output is correct
9 Correct 1 ms 592 KB Output is correct
10 Correct 2 ms 592 KB Output is correct
11 Correct 1 ms 592 KB Output is correct
12 Incorrect 1 ms 208 KB 1st lines differ - on the 1st token, expected: '2', found: '1'
13 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 4013 ms 10012 KB Time limit exceeded
2 Halted 0 ms 0 KB -