# Aiuto per garage

**URL:** <https://forum.olinfo.it/t/aiuto-per-garage/3837>\
**Category:** Aiuto\
**Created:** [20 Agosto 2014, 10:01am UTC](https://forum.olinfo.it/t/aiuto-per-garage/3837 "2014-08-20T10:01:30Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![DonaDev](https://forum.olinfo.it/user_avatar/forum.olinfo.it/donadev/32/54_2.png) [@DonaDev](https://forum.olinfo.it/u/DonaDev)\
**Post date:** [20 Agosto 2014, 10:01am UTC](https://forum.olinfo.it/t/aiuto-per-garage/3837/1 "2014-08-20T10:01:30Z")

</div>

Ciao a tutti, ho provato a fare garage, problema apparentemente semplice, con questo algoritmo:

  

inizialmente, mi tengo due contatori: available, che indica il numero di posti disponibili, e minimum, che indica il minimo posto disponibile, inizializzati rispettivamente a N e 0.

quando entra una macchina, se available == 0 la metto nella coda, altrimenti la posiziono nella posizione minimum, e calcolo il costo da aggiungere alla somma, e in aggiunta ovviamente diminuisco il valore di available

quando invece una macchina esce, se la coda è vuota faccio diventare minimum il numero del parcheggio appena liberato (se è inferiore a minimum stesso) e&nbsp;aumento il valore di available, se invece ha qualche elemento posiziono la macchina in testa alla coda nel posto liberato, e calcolo il prezzo da aggiungere.

  

Nonostante non riesca a trovare errori nel programma, ricevo un punteggio di 33.33/100.

Qualcuno sa aiutarmi?

---

<div class="post-metadata">

**Author:** ![mark03](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/m/439d5e/32.png) [@mark03](https://forum.olinfo.it/u/mark03)\
**Post date:** [20 Agosto 2014, 10:26am UTC](https://forum.olinfo.it/t/aiuto-per-garage/3837/2 "2014-08-20T10:26:22Z")

</div>

Ma va in TLE o WA?

---

<div class="post-metadata">

**Author:** ![DonaDev](https://forum.olinfo.it/user_avatar/forum.olinfo.it/donadev/32/54_2.png) [@DonaDev](https://forum.olinfo.it/u/DonaDev)\
**Post date:** [20 Agosto 2014, 10:58am UTC](https://forum.olinfo.it/t/aiuto-per-garage/3837/3 "2014-08-20T10:58:52Z")

</div>

da errore nell’output, nessun errore ne di memoria ne di tempo… e i testcase funzionano

---

<div class="post-metadata">

**Author:** ![Lawliet](https://forum.olinfo.it/user_avatar/forum.olinfo.it/lawliet/32/28_2.png) [@Lawliet](https://forum.olinfo.it/u/Lawliet)\
**Post date:** [20 Agosto 2014, 12:48pm UTC](https://forum.olinfo.it/t/aiuto-per-garage/3837/4 "2014-08-20T12:48:11Z")

</div>

Quando togli la macchina dalla coda per metterla nel parcheggio decrementi available? Non l’hai scritto… Se non è questo il problema, posta il codice.

  

EDIT: Ops scusa non avevo visto che incrementavi available solo se la coda è vuota 🙂

---

<div class="post-metadata">

**Author:** ![DonaDev](https://forum.olinfo.it/user_avatar/forum.olinfo.it/donadev/32/54_2.png) [@DonaDev](https://forum.olinfo.it/u/DonaDev)\
**Post date:** [20 Agosto 2014, 12:51pm UTC](https://forum.olinfo.it/t/aiuto-per-garage/3837/5 "2014-08-20T12:51:52Z")

</div>

```auto
in >> N >> M;
	available = N;
	for(int n = 0; n < N; n++)
	{
		in >> parks[n].cost;
		parks[n].available = true;
	}
	for(int n = 1; n <= M; n++)
	{
		in >> cars[n].peso;
		cars[n].park = -1;
	}
	int x;
	int sum = 0;
	for(int n = 0; n < 2*M; n++)
	{
		in >> x;
		if(x < 0)
		{
			cout << "Car " << abs(x) << " is about to leave!" << endl;
			if(!carQueue.empty())
			{
				Car a = carQueue.front();
				carQueue.pop();
				cout << "Car with weight " << a.peso << " comes to " << cars[abs(x)].park << endl;
				a.park = cars[abs(x)].park;
				sum += a.peso * parks[a.park].cost;
			}
			else
			{
				minimum = min(minimum, cars[abs(x)].park);
				parks[cars[abs(x)].park].available = true;
				cout << "Nobody in the queue" << endl;
				available++;
			}
			cars[abs(x)].park = -1;
		}
		else
		{
				cout << "Car " << abs(x) << " is about to enter!" << endl;
			if(available == 0)
			{
				cout << "Putting in the queue" << endl;
				carQueue.push(cars[x]);
			}
			else
			{
				while(minimum < N && !parks[minimum].available)
					minimum++;
				cout << "Car " << x << " comes to " << minimum << endl;
				cars[x].park = minimum;
				parks[minimum].available = false;
				sum += cars[x].peso * parks[minimum].cost;
				available--;
			}
		}
	}
	out << sum;

```

---

<div class="post-metadata">

**Author:** ![lucach](https://forum.olinfo.it/user_avatar/forum.olinfo.it/lucach/32/539_2.png) [@lucach](https://forum.olinfo.it/u/lucach)\
**Post date:** [20 Agosto 2014, 1:29pm UTC](https://forum.olinfo.it/t/aiuto-per-garage/3837/6 "2014-08-20T13:29:13Z")

</div>

> ```
> while(minimum < N && !parks[minimum].available)
> minimum++;
> ```
> DonaDev

Considera che in alcuni test case la seguente asserzione, posta dopo le due righe indicate sopra, fallisce.

```
assert(parks[minimum].available);

```

---

<div class="post-metadata">

**Author:** ![DonaDev](https://forum.olinfo.it/user_avatar/forum.olinfo.it/donadev/32/54_2.png) [@DonaDev](https://forum.olinfo.it/u/DonaDev)\
**Post date:** [20 Agosto 2014, 1:55pm UTC](https://forum.olinfo.it/t/aiuto-per-garage/3837/7 "2014-08-20T13:55:26Z")

</div>

grazie mille 🙂 chiedo troppo se ti chiedo l’input del caso?

---

<div class="post-metadata">

**Author:** ![lucach](https://forum.olinfo.it/user_avatar/forum.olinfo.it/lucach/32/539_2.png) [@lucach](https://forum.olinfo.it/u/lucach)\
**Post date:** [20 Agosto 2014, 5:31pm UTC](https://forum.olinfo.it/t/aiuto-per-garage/3837/8 "2014-08-20T17:31:59Z")

</div>

Per esempio, fallisce con questo input (output previsto&nbsp;20163827):

[http://d.pr/f/TlBN](http://d.pr/f/TlBN)

---

<div class="post-metadata">

**Author:** ![VashTheStampede](https://forum.olinfo.it/user_avatar/forum.olinfo.it/vashthestampede/32/10_2.png) [@VashTheStampede](https://forum.olinfo.it/u/VashTheStampede)\
**Post date:** [20 Agosto 2014, 6:35pm UTC](https://forum.olinfo.it/t/aiuto-per-garage/3837/9 "2014-08-20T18:35:53Z")

</div>

Credo che il problema nasca dal fatto che quando liberi un posto per metterci l’auto A (quella in cima alla coda) effettivamente non ti salvi che l’auto A viene parcheggiata lì, lo fai nella variabile A ma non nell’array delle auto.

  

Quindi quando dovrai liberare il parcheggio di quell’auto (nel caso della coda vuota) eseguendo il codice

> parks[cars[-x].park].available = true;

non sai che valore abbia cars[-x].park, perché non te lo sei salvato!  
  
E’ un po’ contorto ma dovrebbe essere così

  

EDIT: confermo, ho fatto una leggera modifica al programma per risolvere la tua “svista” e totalizza 100/100 🙂

---

<div class="post-metadata">

**Author:** ![DonaDev](https://forum.olinfo.it/user_avatar/forum.olinfo.it/donadev/32/54_2.png) [@DonaDev](https://forum.olinfo.it/u/DonaDev)\
**Post date:** [20 Agosto 2014, 6:40pm UTC](https://forum.olinfo.it/t/aiuto-per-garage/3837/10 "2014-08-20T18:40:33Z")

</div>

oddio hai ragione! cavolo i soliti errori di distrazione D: grazie infinite!
