binary search data structures greedy sortings *1700

Please click on ads to support us..

C++ Code:

#include <iostream>
#include <cstdio>
#include <set>

using namespace std;
int n, m, q, len, sum;
set<int> pos;

int main()
{
      cin >> n >> m >> len >> q;
      pos.insert(0);
      pos.insert(n + 1);
      // cantidad de barcos máximos que entran en el tablero
      sum = (n + 1) / (len + 1);

      for (int i = 1; i <= q; ++i)
      {
            int x, l, r;
            cin >> x;
            // Si la bala actual ya existe, continua a la siguiente iteracion
            if (pos.find(x) != pos.end())
                  continue;
            // Se obtiene la posicion de la bala mas cercana por encima de la actual
            auto it = pos.upper_bound(x);
            // Se obtiene la posicion de la bala mas cercana por debajo de la actual
            l = *prev(it);
            r = *it;
            // Restamos a la cantidad de barcos maximos los barcos que entran fuera de los lugares donde cayeron las balas
            sum -= (r - l) / (len + 1);
            // Sumamos la cantidad de barcos que entran en el rango entre la bala minima - actual y bala actual - maxima
            sum += (x - l) / (len + 1) + (r - x) / (len + 1);
            // Insertamos la posicion de la bala actual, se usa set en caso se dispare a la misma posicion varias veces
            pos.insert(x);
            // Si sum es menor que la cantidad de barcos maximos que deberian entrar en el tablero, se hizo trampa
            if (sum < m)
            {
                  cout << i << '\n';
                  return 0;
            }
      }
      // No se hizo trampa
      cout << "-1\n";
      return 0;
}


Comments

Submit
0 Comments
More Questions

454A - Little Pony and Crystal Mine
2A - Winner
1622B - Berland Music
1139B - Chocolates
1371A - Magical Sticks
1253A - Single Push
706B - Interesting drink
1265A - Beautiful String
214A - System of Equations
287A - IQ Test
1108A - Two distinct points
1064A - Make a triangle
1245C - Constanze's Machine
1005A - Tanya and Stairways
1663F - In Every Generation
1108B - Divisors of Two Integers
1175A - From Hero to Zero
1141A - Game 23
1401B - Ternary Sequence
598A - Tricky Sum
519A - A and B and Chess
725B - Food on the Plane
154B - Colliders
127B - Canvas Frames
107B - Basketball Team
245A - System Administrator
698A - Vacations
1216B - Shooting
368B - Sereja and Suffixes
1665C - Tree Infection