Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Exercicio: http://olimpiada.ic.unicamp.br/pratique/programacao/nivel2/2009f2p2_olimpiada
- obs.: o corretor da olimpiada não está funcionando. Para correção use http://br.spoj.com/problems/OLIMP09/
- */
- #include <stdio.h>
- #define MAX1 100
- typedef struct {
- int indice;
- int ouro;
- int prata;
- int bronze;
- } s_pais;
- void organiza_pais(s_pais lista[], int n); //n: numero de paises
- void troca_pais(s_pais lista[], int i, int j);
- void gera_dat(s_pais lista[], int n);
- int main(void){
- int N, M; //numero de países (1 <= N <= 100), número de modalidades (1 <= M <= 100)
- int O, P, B, i; //ouro, prata, bronze, contador
- s_pais lista[MAX1]; //lista de paises com ate 100 paises
- scanf("%d %d", &N, &M); //quantidade de paises e modalidades
- for(i = 0; i < N; i++){ //zerando os valores a serem trabalhados
- lista[i].ouro = 0;
- lista[i].prata = 0;
- lista[i].bronze = 0;
- lista[i].indice = i+1;
- }
- for (i = 0; i < M; i++){ //paises recebendo medalhas
- scanf("%d %d %d",&O, &P, &B); //modalidade i
- lista[O-1].ouro += 1;
- lista[P-1].prata += 1;
- lista[B-1].bronze += 1;
- }
- organiza_pais(lista, N); //organiza a lista de N paises
- for(i = 0; i < N; i++) printf("%d ",lista[i].indice); //printa os paises ja organizados por medalhas
- gera_dat(lista, N); //adicional: gera arquivo dat com a saida
- return 0;
- }
- void organiza_pais(s_pais lista[], int n){
- s_pais aux;
- for (int i = 0; i<n-1; i++){
- for(int j = i+1; j<n; j++){
- if(lista[j].ouro > lista[i].ouro) troca_pais(lista,i,j); //compara ouro
- else if(lista[i].ouro == lista[j].ouro){ //se ouro for igual...
- if(lista[j].prata > lista[i].prata) troca_pais(lista,i,j); //compara prata
- else if(lista[i].prata == lista[j].prata){ //se prata for igual...
- if(lista[j].bronze > lista[i].bronze) troca_pais(lista,i,j); //compara bronze
- else if(lista[i].bronze == lista[j].bronze){//se a porra toda for igual...
- if(lista[j].indice < lista[i].indice) troca_pais(lista,i,j);//ganha o de menor indice
- }
- }
- }
- }
- }
- }
- void troca_pais(s_pais lista[], int i, int j){ //algoritmo simples de troca de posição
- s_pais aux;
- aux = lista[i];
- lista[i] = lista[j];
- lista[j] = aux;
- }
- void gera_dat(s_pais lista[], int n){ //eu não entendo essa merda, só copiei do PDF (sinceridade é tudo)
- FILE *arquivo;
- int aux[MAX1];
- int aux2[MAX1];
- for(int i = 0; i<n; i++){
- aux[i] = lista[i].indice;
- }
- arquivo = fopen("t3_rafael_gibim_14081673.dat","wb+");
- fwrite(aux,sizeof(int),n,arquivo);
- rewind(arquivo);
- fread(aux2, sizeof(int), n, arquivo);
- printf("dat: ");
- for(int i=0; i<n; i++){
- printf("%d ",aux2[i]);
- }
- fclose(arquivo);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement