Pagini recente » Cod sursa (job #2504616) | Cod sursa (job #1249690) | Cod sursa (job #2291820) | Cod sursa (job #2374758) | Cod sursa (job #2512817)
#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[10000];
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;
}
}
fout<<distanta_maxima;
} else {
fout<<0;
}
return 0;
}