Cod sursa(job #2513199)

Utilizator goblinupufosPopescu Traian goblinupufos Data 22 decembrie 2019 15:39:29
Problema Orase Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <iostream>
#include <algorithm>
#include <fstream>

using namespace std;

struct strada {

    int str_p, str_sec;

};

bool comp ( strada x, strada y ) {

    if ( x.str_sec == y.str_sec )
        return ( x.str_p < y.str_p );

    return ( x.str_sec > y.str_sec );

}

int main()
{

    ifstream fin("orase.in");
    ofstream fout("orase.out");
    strada sir[50001];
    int m, n;
    fin>>m>>n;

    for ( int i = 1; i <= n; ++i ) {

        fin>>sir[i].str_p>>sir[i].str_sec;

    }

    sort( sir + 1, sir + 1 + n, comp );

    if ( n >= 2 ) {

        int distanta = sir[1].str_sec + sir[2].str_sec;
        int distanta_maxima = sir[1].str_sec + sir[2].str_sec;

        if ( sir[2].str_p > sir[1].str_p ) {

            distanta += sir[2].str_p - sir[1].str_p;
            distanta_maxima = distanta;

        } else if ( sir[2].str_p < sir[1].str_p ) {

            distanta += sir[1].str_p - sir[2].str_p;
            distanta_maxima = distanta;

        }

        for ( int i = 3; i <= n; ++i ) {

            distanta = sir[1].str_sec + sir[i].str_sec;

            if ( sir[i].str_p > sir[1].str_p ) {

                distanta += sir[i].str_p - sir[1].str_p;

            } else if ( sir[2].str_p < sir[1].str_p ) {

                distanta += sir[1].str_p - sir[i].str_p;

            }

            if ( distanta > distanta_maxima ) {

                distanta_maxima = distanta;

            } else {

                distanta = 0;

            }

        }

        fout<<distanta_maxima;

    } else {

        fout<<0;

    }

    return 0;
}