URI ONLINE JUDGE SOLUTION 1303 - Online Judge

Latest

This is an Online Judge Solution Base Site. We can discuss & Solve any contest solution in Programming.

Friday, April 10, 2020

URI ONLINE JUDGE SOLUTION 1303

Problem Number: 1303
Problem Name: Spurs Rocks
Author’s Name: IX Maratona de Programação IME-USP, 2005 Brazil
Timelimit: 1
Problem Category: AD-HOC
Problem Source: https://www.urionlinejudge.com.br/judge/en/problems/view/1303

Solution:

#include <stdio.h>
#include <stdlib.h>

struct time{
       int numero;
       int pontos;
       int marcados;
       int tomados;
};

int ordem(const void *a, const void *b)
{
    struct time *ia = (struct time *)a;
    struct time *ib = (struct time *)b;
    if(ib->pontos != ia->pontos)
        return ib->pontos - ia->pontos;
    if(ib->tomados == 0) ib->tomados = 1;
    if(ia->tomados == 0) ia->tomados = 1;
    if((float)ib->marcados/(float)ib->tomados != (float)ia->marcados/(float)ia->tomados){
        if((float)ib->marcados/(float)ib->tomados - (float)ia->marcados/(float)ia->tomados > 0)
            return 1;
        else
            return -1;
    }
    if(ib->marcados != ia->marcados)
        return ib->marcados - ia->marcados;
    return ib->numero - ia->numero;
   
}

int main(){
    int n, i, p, x, y, z, w;
    int h = 0;
   
    while(1){
        scanf("%d", &n);
        if(n == 0) break;
        if(h != 0) printf("n");
        h++;
        struct time array[n];
        p = n*(n-1)/2;
        for(i = 0; i < n; i++){
              array[i].numero = 0;
              array[i].pontos = 0;
              array[i].marcados = 0;
              array[i].tomados = 0;
        }
        for(i = 0; i < p; i++){
             scanf("%d %d %d %d", &x, &y, &z, &w);
             if(array[x-1].numero == 0) array[x-1].numero = x;
             if(array[z-1].numero == 0) array[z-1].numero = z;
                  array[x-1].marcados += y;
                  array[x-1].tomados += w;
                  array[z-1].marcados += w;
                  array[z-1].tomados += y;
             if(y - w > 0){
                  array[x-1].pontos += 2;
                  array[z-1].pontos += 1;
             }else{
                   array[z-1].pontos += 2;
                   array[x-1].pontos += 1;
             }
        }
        qsort(array,n,sizeof(time),ordem);
        printf("Instancia %dn",h);
        for(i = 0; i < n; i++){
              printf("%d",array[i].numero);
              printf(" ");
        }
        printf("n");
                     
    }
    return 0;
}

No comments:

Post a Comment

Thanks..