Esercizio: Turni di guardia

Ho iniziato da poco a programmare in c++ e non riesco a capire cosa ci sia di sbagliato, potreste darmi una mano?

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

int main() {
	freopen("imput.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
	int giorni, parenti;
	cin>>giorni>>parenti;
	vector<pair <int,int> > disponibilita(parenti); //pair=contenitore di coppie
	sort(disponibilita.begin(),disponibilita.end()); //sort fa ordinamento
	
	int pagati=1, day=0, i=0;
	bool fine=false;
	while(day!=giorni-1){
		int day=disponibilita[i].second;
	    while(disponbilita[i].first==day){
	    	if(disponbilita[i].second>day){
		    	pagati++;
			    int day=disponibilita[i+1].second;
	        }
	        i++;
		}
	}
	
    cout<<pagati;
	return 0;
}
1 Mi Piace

In questo caso il problema è che va in loop, partendo dal primo valore nel caso di esempio viene assegnato day = 2 e si chiede nel while(disponbilita[i].first==day) quando 0 == 2, sempre falso, e continua cosi all’infinito, poiché la volta dopo riassegna l’elemento di i = 0, credo vada rivisto anche il ragionamento, prova magari a farlo prima a mano

1 Mi Piace

Vedo diversi altri problemi nel tuo codice.

  • C’è un errore di spelling nella riga
    freopen("imput.txt", "r", stdin);
    “imput.txt” dovrebbe essere “input.txt”.
  • Non stai leggendo gli intervalli dal file di input (in altre parole, non stai inizializzando disponibilita).
  • La riga int day=disponibilita[i+1].second; non fa quello che credi, cioè aggiornare il valore della variabile day dichiarata in precedenza. Invece, quello che succede è che viene creata e inizializzata una nuova variabile day – diversa dalla precedente – che esiste soltanto nello scope dell’if in cui l’hai dichiarata. Cioè, questa variabile smette di esistere non appena esci dall’if. In particolare, il valore della “vera” variabile day resta quello di prima. Per fixare, basta rimuovere int.
  • Per finire, ti consiglio di stampare sempre un newline alla fine dell’output. Non dovrebbe essere necessario, ma è buona pratica.

Detto questo, non ho controllato la correttezza dell’algoritmo, ma se hai altre domande chiedi pure. :slight_smile:

1 Mi Piace