# Soste in autostrada (autogrill) aiuto

**URL:** <https://forum.olinfo.it/t/soste-in-autostrada-autogrill-aiuto/8021>\
**Category:** Aiuto\
**Created:** [29 Gennaio 2023, 9:59am UTC](https://forum.olinfo.it/t/soste-in-autostrada-autogrill-aiuto/8021 "2023-01-29T09:59:06Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Drayax](https://forum.olinfo.it/user_avatar/forum.olinfo.it/drayax/32/1452_2.png) [@Drayax](https://forum.olinfo.it/u/Drayax)\
**Post date:** [29 Gennaio 2023, 9:59am UTC](https://forum.olinfo.it/t/soste-in-autostrada-autogrill-aiuto/8021/1 "2023-01-29T09:59:06Z")

</div>

```auto
#include <bits/stdc++.h>
using namespace std;

set<long long> s;
long long k;
auto itr = s.begin();

void inizia() {
  return;
}

void apri(long long p) {
  s.insert(p);
  return;
}

void chiudi(long long p) {
  s.erase(p);
  return;
}

long long chiedi(long long p) {
  if(s.empty()) return -1;
  else{
    itr = s.lower_bound(p);
    if(p>*itr){
        itr = s.end();
        itr--;
    } 
    k = *itr;
  }

    return k;
}    

```

sincero, so che sto dimenticando qualcosa, perchè l’algoritmo riesce solo nelle task base, ma dopo svariati tentativi, e vedendo che con esempi dati da me l’output è sempre corretto, non ho idea di cosa io abbia sbagliato. Mi sto allenando tanto per l’ultima gara, quindi se riuscite a farmi capire per bene l’errore vi sarei molto grato, grazie in anticipo.

---

<div class="post-metadata">

**Author:** ![dp\_1](https://forum.olinfo.it/user_avatar/forum.olinfo.it/dp_1/32/2635_2.png) [@dp\_1](https://forum.olinfo.it/u/dp_1)\
**Post date:** [30 Gennaio 2023, 5:09pm UTC](https://forum.olinfo.it/t/soste-in-autostrada-autogrill-aiuto/8021/2 "2023-01-30T17:09:36Z")

</div>

Prova con questo testcase:

```auto
3
a 5
a 20
q 6

```

Il tuo codice stampa `20`, mentre l’autogrill aperto più vicino al km6 è il `5`.

---

<div class="post-metadata">

**Author:** ![Drayax](https://forum.olinfo.it/user_avatar/forum.olinfo.it/drayax/32/1452_2.png) [@Drayax](https://forum.olinfo.it/u/Drayax)\
**Post date:** [30 Gennaio 2023, 9:32pm UTC](https://forum.olinfo.it/t/soste-in-autostrada-autogrill-aiuto/8021/3 "2023-01-30T21:32:13Z")

</div>

```auto
#include <bits/stdc++.h>
using namespace std;

set<long long> s;
long long k;
auto itr = s.begin();
auto tri = itr;

void inizia() {
  return;
}

void apri(long long p) {
  s.insert(p);
  return;
}

void chiudi(long long p) {
  s.erase(p);
  return;
}

long long chiedi(long long p) {
  if(s.empty()) return -1;
  else{
    itr = s.lower_bound(p);
    tri=itr;
    tri--;
    if(abs(p-*itr)<=abs(p-*tri)) return *itr;
    else return *tri;
  }
}    

```

grazie mille,  
adesso ho aggiustato creando un altro iteratore, e inizializzandolo al primo. In questo modo alla fine faccio il confronto tra il primo numero \>= p, e il primo numero \<p. In questo modo sono riuscito a fare 13/20 subtasks. ma ancora non tutte. Ci ho riflettuto su una 30 di min ma non riesco ancora a trovare il bug. Ogni idea è ben accetta.

---

<div class="post-metadata">

**Author:** ![dp\_1](https://forum.olinfo.it/user_avatar/forum.olinfo.it/dp_1/32/2635_2.png) [@dp\_1](https://forum.olinfo.it/u/dp_1)\
**Post date:** [31 Gennaio 2023, 10:33am UTC](https://forum.olinfo.it/t/soste-in-autostrada-autogrill-aiuto/8021/4 "2023-01-31T10:33:19Z")

</div>

Prova a considerare questi due casi:

- Cosa succede se non esiste un elemento \>= p?
- Cosa succede se lower\_bound ti ritorna il primo elemento del set?

---

<div class="post-metadata">

**Author:** ![Drayax](https://forum.olinfo.it/user_avatar/forum.olinfo.it/drayax/32/1452_2.png) [@Drayax](https://forum.olinfo.it/u/Drayax)\
**Post date:** [31 Gennaio 2023, 1:19pm UTC](https://forum.olinfo.it/t/soste-in-autostrada-autogrill-aiuto/8021/5 "2023-01-31T13:19:33Z")

</div>

100/100 ti stimo.
