Classifica

Come se le olimpiadi non bastassero, Roma ospiterà il campionato mondiale di calcio.
I vertici dell’amministrazione vogliono che tutto sia perfetto, quindi hanno richiesto che venga scritto un programma che determina (data la lista delle partite giocate) la squadra vincente.

In un campionato del mondo i gironi sono composti da N squadre (N è un numero pari compreso tra 4 e 20, estremi inclusi) e queste squadre devono scontrarsi tra loro una e una sola volta.
Se una squadra vince ottiene 3 punti, se pareggia 1, se perde 0.
Il regolamento stabilisce che può vincere al massimo una squadra, quindi l’amministrazione ha deciso che a parità di punteggio vincerà la squadra con numero più basso.

Dati di input

Nella prima riga del file è presente il numero N di squadre presenti nel girone.
Ogni squadra è rappresentata con un numero da 1 a N.

Le righe successive rappresentano tutte le partite che si sono svolte.
Ciascuna riga viene presentata con 4 interi separati da spazio, rispettivamente:

  • s1, s2, le due squadre che hanno giocato la partita;
  • g1, g2, il numero di gol segnati da ciascuna squadra.

Dati di output

Il file output.txt contiene due interi separati da spazio, rispettivamente:

  • il numero della squadra vincente,
  • il numero di punti totalizzati dalla squadra vincente.

Assunzioni

  • 4 ≤ N ≤ 20

Esempi di input/output

input.txt output.txt
4
1 2 2 0
3 4 1 1
1 3 1 1
2 4 0 0
1 4 2 2
2 3 0 0
1 5

/*
    www.valcon.it
	GATOR 2015 - Classifica
*/
#include

int punti_squadra[21];                          // già inizializzato a 0

int main()
{
	int N, 
	    s1,s2,g1,g2;
	int squadra,
	    vincitrice,
		punti_vinc;
	    
	FILE* fin =fopen( "input.txt","r");
	FILE* fout=fopen("output.txt","w");

	fscanf(fin, "%d", &N);     						
	do                                         // per ogni partita
	{
		fscanf(fin, "%d %d %d %d", &s1, &s2, &g1, &g2);     				
		if(g1 > g2)
			punti_squadra[s1] += 3;
		else if(g1 == g2)
		{
			punti_squadra[s1] += 1;
			punti_squadra[s2] += 1;			
 	    }
 	    else
 	    	punti_squadra[s2] += 3;
	}
	while(!feof(fin));
	
	vincitrice=1;
	punti_vinc=punti_squadra[1];
	for(squadra=2; squadra <= N; squadra++)    // per ogni squadra
	    if(punti_squadra[squadra] > punti_vinc)
	    {
		    vincitrice=squadra;
		    punti_vinc=punti_squadra[squadra];
 	    }
	fprintf(fout, "%d %d\n", vincitrice, punti_vinc);
	
	return 0;
}

/*
    www.valcon.it
	GATOR 2015 - Classifica
*/
#include
#include

using namespace std;

int punti_squadra[21];                          // già inizializzato a 0

int main()
{
	int N, 
	    s1,s2,g1,g2;
	    
	ifstream fin ( "input.txt");
	ofstream fout("output.txt");

	fin >> N;     						
	do                                         // per ogni partita
	{
		fin >> s1 >> s2 >> g1 >> g2;     				
		
		if(g1 > g2)
			punti_squadra[s1] += 3;
		else if(g1 == g2)
		{
			punti_squadra[s1] += 1;
			punti_squadra[s2] += 1;			
 	    }
 	    else
 	    	punti_squadra[s2] += 3;
	}
	while(!fin.eof());
	
	int vincitrice=1;
	int punti_vinc=punti_squadra[1];
	for(int squadra=2; squadra <= N; squadra++)    // per ogni squadra
	    if(punti_squadra[squadra] > punti_vinc)
	    {
		    vincitrice=squadra;
		    punti_vinc=punti_squadra[squadra];
 	    }
	fout << vincitrice << " " << punti_vinc;
	
	return 0;
}

Il correttore ufficiale dà 80/100 perché alcuni file di test hanno un new line dopo l'ultima partita e il ciclo while(!fin.eof()) fa un passo in più.

Si può correggere con un controllo aggiuntivo: se dopo una lettura non è finito fuori allora prende in considerazione i dati

fin >> s1;
if(!fin.eof())
{
    fin >> s2 >> g1 >> g2; 
    ...
}