http://juez.oia.unsam.edu.ar/#/task/maraton/statement
Este es el segundo desafío. Respondan con soluciones o ideas!
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;
}
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.
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).
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.