Cod sursa(job #2672333)

Utilizator tudorcioc5Cioc Tudor tudorcioc5 Data 13 noiembrie 2020 17:44:50
Problema Orase Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.81 kb
#include <fstream>
using namespace std;
 
const int MAX_LENGTH = 1000001;
 
int main (void){
    ifstream fin ("orase.in");
 
    int length, citiesNumber;
    fin>>length>>citiesNumber;
 
    int cityLength[MAX_LENGTH] = {};
    int secondLength[MAX_LENGTH] = {};
 
    int maximum = 0;
    int i;
    for (i=1; i<=citiesNumber; i++){
        int cityDistance, currentCityLength;
        fin>>cityDistance>>currentCityLength;
 
        if (cityLength[cityDistance] == 0)
            cityLength[cityDistance] = currentCityLength;
        else{
            if (cityLength[cityDistance] > secondLength[cityDistance] && currentCityLength > cityLength[cityDistance]){
                secondLength[cityDistance] = cityLength[cityDistance];
                cityLength[cityDistance] = currentCityLength;
            }else if (secondLength[cityDistance] < currentCityLength && currentCityLength < cityLength[cityDistance]){
                secondLength[cityDistance] = currentCityLength;
            }
 
            if ((secondLength[cityDistance] + cityLength[cityDistance]) > maximum)
                maximum = currentCityLength + secondLength[cityDistance];
        }
    }
    fin.close();
 
    for (i=0; cityLength[i] == 0; i++);
 
    int maximumPath = cityLength[i];
    int maximumPathIndex = i;
 
    for (i++; i<=length; i++)
        if (cityLength[i] != 0){
            if ((maximumPath + i - maximumPathIndex + cityLength[i]) > maximum)
                maximum = maximumPath + i - maximumPathIndex + cityLength[i];
 
            if (cityLength[i] > (maximumPath + i - maximumPathIndex)){
                maximumPath = cityLength[i];
                maximumPathIndex = i;
            }
 
        }
 
    ofstream fout("orase.out");
    fout<<maximum<<"\n";
    fout.close();
 
    return 0;
}