Cod sursa(job #2447434)

Utilizator uvIanisUrsu Ianis Vlad uvIanis Data 13 august 2019 13:03:41
Problema Orase Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <algorithm>
#include <fstream>
#include <cmath>
using namespace std;

size_t N, M;
ifstream fin("orase.in");
ofstream fout("orase.out");

struct Oras{
    size_t d, l;

   static size_t distance(Oras const& A, Oras const& B){
        if(A.d >= B.d) return A.l + B.l + A.d - B.d;
        else return A.l + B.l + B.d - A.d;
   }

   friend void operator >>(ifstream& in, Oras& O){
       in >> O.d >> O.l;
   }

   inline bool operator > (Oras const& O){
        return l > O.l + abs(d - O.d);
   }

   void operator = (Oras const& O){
        l = O.l;
        d = O.d;
   }
};

Oras v[50001];

int main()
{
    fin >> M >> N;

    for(size_t i = 1; i <= N; i++)
        fin >> v[i];

    sort(v + 1, v + N + 1, [](Oras& A, Oras& B){return A.d < B.d;});

    size_t best_first{1}, best_last{N};

    for(size_t i = 2; i < N; i++){
        if(v[i] > v[best_first]) best_first = i;
    }

    for(size_t i = N - 1; i > best_first; i--){
        if(v[i] > v[best_last]) best_last = i;
    }

    fout << Oras::distance(v[best_first], v[best_last]);
}