Advertisement
Drowze

Exercício Extra Para dia 16/11

Nov 16th, 2014
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.40 KB | None | 0 0
  1. /*
  2. Exercicio: http://olimpiada.ic.unicamp.br/pratique/programacao/nivel2/2009f2p2_olimpiada
  3. obs.: o corretor da olimpiada não está funcionando. Para correção use http://br.spoj.com/problems/OLIMP09/
  4. */
  5.  
  6. #include <stdio.h>
  7.  
  8. #define MAX1 100
  9.  
  10. typedef struct {
  11.         int indice;
  12.         int ouro;
  13.         int prata;
  14.         int bronze;
  15. } s_pais;
  16.  
  17. void organiza_pais(s_pais lista[], int n); //n: numero de paises
  18. void troca_pais(s_pais lista[], int i, int j);
  19. void gera_dat(s_pais lista[], int n);
  20.  
  21. int main(void){
  22.         int N, M; //numero de países (1 <= N <= 100), número de modalidades (1 <= M <= 100)
  23.         int O, P, B, i; //ouro, prata, bronze, contador
  24.         s_pais lista[MAX1]; //lista de paises com ate 100 paises
  25.  
  26.         scanf("%d %d", &N, &M); //quantidade de paises e modalidades
  27.  
  28.         for(i = 0; i < N; i++){ //zerando os valores a serem trabalhados
  29.                 lista[i].ouro = 0;
  30.                 lista[i].prata = 0;
  31.                 lista[i].bronze = 0;
  32.                 lista[i].indice = i+1;
  33.         }
  34.  
  35.         for (i = 0; i < M; i++){ //paises recebendo medalhas
  36.                 scanf("%d %d %d",&O, &P, &B); //modalidade i
  37.                 lista[O-1].ouro += 1;
  38.                 lista[P-1].prata += 1;
  39.                 lista[B-1].bronze += 1;
  40.         }
  41.        
  42.         organiza_pais(lista, N); //organiza a lista de N paises
  43.  
  44.         for(i = 0; i < N; i++) printf("%d ",lista[i].indice); //printa os paises ja organizados por medalhas
  45.        
  46.         gera_dat(lista, N); //adicional: gera arquivo dat com a saida
  47.  
  48.         return 0;
  49. }
  50.  
  51. void organiza_pais(s_pais lista[], int n){
  52.         s_pais aux;
  53.         for (int i = 0; i<n-1; i++){
  54.                 for(int j = i+1; j<n; j++){
  55.                         if(lista[j].ouro > lista[i].ouro) troca_pais(lista,i,j); //compara ouro
  56.                         else if(lista[i].ouro == lista[j].ouro){ //se ouro for igual...
  57.                                 if(lista[j].prata > lista[i].prata) troca_pais(lista,i,j); //compara prata
  58.                                 else if(lista[i].prata == lista[j].prata){ //se prata for igual...
  59.                                         if(lista[j].bronze > lista[i].bronze) troca_pais(lista,i,j); //compara bronze
  60.                                         else if(lista[i].bronze == lista[j].bronze){//se a porra toda for igual...
  61.                                                 if(lista[j].indice < lista[i].indice) troca_pais(lista,i,j);//ganha o de menor indice
  62.                                         }
  63.                                 }
  64.                         }
  65.                 }
  66.         }
  67. }
  68.  
  69.  
  70. void troca_pais(s_pais lista[], int i, int j){ //algoritmo simples de troca de posição
  71.         s_pais aux;
  72.         aux = lista[i];
  73.         lista[i] = lista[j];
  74.         lista[j] = aux;
  75. }
  76.  
  77. void gera_dat(s_pais lista[], int n){ //eu não entendo essa merda, só copiei do PDF (sinceridade é tudo)
  78.         FILE *arquivo;
  79.         int aux[MAX1];
  80.         int aux2[MAX1];
  81.  
  82.         for(int i = 0; i<n; i++){
  83.                 aux[i] = lista[i].indice;
  84.         }
  85.  
  86.         arquivo = fopen("t3_rafael_gibim_14081673.dat","wb+");
  87.         fwrite(aux,sizeof(int),n,arquivo);
  88.  
  89.         rewind(arquivo);
  90.  
  91.         fread(aux2, sizeof(int), n, arquivo);
  92.         printf("dat: ");
  93.         for(int i=0; i<n; i++){
  94.                 printf("%d ",aux2[i]);
  95.         }
  96.         fclose(arquivo);
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement