Desafío Dal Lago #2 : Corriendo una Maraton

http://juez.oia.unsam.edu.ar/#/task/maraton/statement
Este es el segundo desafío. Respondan con soluciones o ideas!

4 Me gusta

para cuando el alfajor? (??

#include <iostream>
#include <cstdio>
using namespace std;

int main(){
    freopen("maraton.in","r",stdin);
    int corredores[10],cant,num,cat;
    for(int a=0; a<10; a++) corredores[a]=0;

    cin>>cant;
    for(int a=1; a<=cant; a++){
        cin>>num>>cat;
        if(corredores[cat-1]==0)
            corredores[cat-1]=num;
    }
    freopen("maraton.out","w",stdout);
    for(int a=0;a<10;a++)
        cout<<a+1<<" "<<corredores[a]<<endl;
}
4 Me gusta

Bien ahi usando arrays en vez de 10 ifs…

freopen como lo usaste vos sirve para redirigr la entrada estandar (stdin, la del cin) a un archivo, en este caso “maraton.in”. Está bien usado. Otra forma de hacerlo es usando “streams de archivos”

#include <iostream>
#include <fstream>

using namespace std;

#define MAXC 15

int main() {
	ifstream in ("maraton.in");
	ofstream out ("maraton.out");
	
	int A;
	int primero[MAXC];
	for (int i = 0; i < MAXC; i++) {
		primero[i] = 0; 
	}
	
	in >> A;
	
	for (int i = 0; i < A; i++) {
		int N, C;
		in >> N >> C;
		if (primero[C] == 0) {
			primero[C] = N;
		}
	}
	
	for (int i = 1; i < 11; i++) {
		out << i << " " << primero[i] << std::endl;
	}	
	
}

Notar que uso in y out como uso a cin y cout.
Esto nos permite tener un programa que use archivos pero independientemente use cin,cout, por ejemplo para debuggear.

3 Me gusta

La manera de hacer IO con streams es buena. Incluso les podemos llamar cin y cout si queremos

ifstream  cin ("maraton.in" );
ofstream cout ("maraton.out");

Y todo funciona igual que lo usual (aunque en este caso no podemos usar “los verdaderos” cin y cout, porque estos streams al tener el mismo nombre ahora los tapan).

1 me gusta

Una diferencia importante es que el freopen cambia cin y cout en forma permanente para todo el programa, en cualquier función. Los streams del ejemplo anterior cambiarían solamente en el main.

1 me gusta