Cod sursa(job #1045019)

Utilizator rcalitaCalita Raluca rcalita Data 30 noiembrie 2013 19:21:09
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.79 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream in("transport.in");
ofstream out("transport.out");
int main()
{
    int saltele[16000];
    int max_drumuri, nr_saltele, i, total = 0, rezultat, drumuri_curente, incarcatura_curenta, tmp;;
    in>>nr_saltele>>max_drumuri;
    for(i = 0; i< nr_saltele; i++)
    {
        in>>saltele[i];
        total += saltele[i];
    }

    rezultat = total - (total / max_drumuri);
    inceput:
    incarcatura_curenta = 0;
    drumuri_curente = 0;
    for(i = 0; i< nr_saltele; i++)
    {
        if(rezultat < saltele[i])
        {
            rezultat = saltele[i];
            goto inceput;
        }
        incarcatura_curenta+= saltele[i];
        if(incarcatura_curenta >= rezultat)
        {
			if(incarcatura_curenta > rezultat)
				incarcatura_curenta = saltele[i];
			else 
				incarcatura_curenta = 0;
            drumuri_curente++;
        }
		
		if(i == nr_saltele -1)
			if(incarcatura_curenta > 0)
				drumuri_curente++;
        if(drumuri_curente > max_drumuri)
        {
            rezultat++;
            goto inceput;
        }
		if(drumuri_curente < max_drumuri)
        {
            rezultat--;
            goto inceput;
        }
    }

	tmp = rezultat;
	while(true)
	{
		tmp --; 
	    incarcatura_curenta = 0;
		drumuri_curente = 0;
		for(i = 0; i< nr_saltele; i++)
		{
			if(rezultat < saltele[i])
			{
				rezultat = saltele[i];
				goto inceput;
			}
			incarcatura_curenta+= saltele[i];
			if(incarcatura_curenta >= rezultat)
			{
				if(incarcatura_curenta > rezultat)
					incarcatura_curenta = saltele[i];
				else 
					incarcatura_curenta = 0;
				drumuri_curente++;
			}
		}
		if(drumuri_curente != max_drumuri)
			break;
	}
	tmp++;
	out<<tmp;
    return 0;
}