Cod sursa(job #1773809)

Utilizator priboiraduPriboi Radu Bogdan priboiradu Data 8 octombrie 2016 11:25:48
Problema Orase Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <stdio.h>
#include <stdlib.h>

int orase[1000000][2];

int maxdif( int a, int b ) {
    if ( a - b >= 0 )
        return a - b;
    return b - a;
}

int main() {
    FILE *fin, *fout;
    int m, n, i, d, l, max, dist, j;
    fin = fopen( "orase.in", "r" );
    fout = fopen( "orase.out", "w" );
    fscanf( fin, "%d%d", &m, &n );
    for ( i = 0; i < n; i++ ) {
        fscanf( fin, "%d%d", &d, &l );
        if ( orase[d][0] == 0 )
            orase[d][0] = l;
        else
            orase[d][1] = l;
    }
    max = 0;
    for ( i = 0; i <= m; i++ ) {
        for ( j = 0; j <= m; j++ ) {
            if ( orase[i][0] != 0 && orase[j][1] != 0 ) {
                dist = orase[i][0] + orase[j][1] + maxdif( i, j );
                if ( max < dist )
                    max = dist;
            }
            if ( orase[i][0] != 0 && orase[i][1] != 0 ) {
                dist = orase[j][0] + orase[i][0] + maxdif( i, j );
                if ( max < dist )
                    max = dist;
            }
            if ( orase[j][0] != 0 && orase[j][1] != 0 ) {
                dist = orase[j][1] + orase[i][1] + maxdif( i, j );
                if ( max < dist )
                    max = dist;
            }
        }
    }
    fprintf( fout, "%d", max );
    fclose( fin );
    fclose( fout );
    return 0;
}