Cod sursa(job #1260066)

Utilizator ZeBuGgErCasapu Andreas ZeBuGgEr Data 10 noiembrie 2014 21:06:40
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
#include <fstream>
 
using namespace std;
 
ifstream fin ("transport.in");
ofstream fout ("transport.out");
 
int main()
{
    int n,k,s=0,temp3;
    long int ok=0,temp=0,sum=0,temp2;
    bool check=0,flag=0;
    fin>>n>>k;
    int a[n];
    for(int i=0;i<n;i++)
    {
            fin>>a[i];
            if(s<a[i])
            {
                      s=a[i];
            }
            sum+=a[i];
    }
    while(1)
    {
            flag=1;
            temp3=1;
            temp=(s+sum)/2;
            temp2=0;
            //fout<<" 1 "<<temp<<" "<<temp3<<" "<<s<<" "<<sum<<'\n';
            for(int i=0;i<n;i++)
            {
                    if(temp2+a[i]<=temp)
                    {
                                        temp2+=a[i];
                    }
                    else if(a[i]<=temp)
                    {
                        temp2=a[i];
                        temp3++;
                    }
                    else
                    {
                        flag=0;
                        break;
                    }
            }
            if(temp3>k&&flag==1)
            {
                       s=temp+1;
            }
            else if(temp3<k&&flag==1)
            {
                 ok=temp;
                 sum=temp-1;
            }
            else if(temp3==k&&flag==1)
            {
                sum=temp;
                ok=temp;
            }
            //fout<<" 2 "<<temp<<" "<<temp3<<" "<<s<<" "<<sum<<" "<<ok<<'\n';
            if(s>=sum)
            {
                      if(check==1)
                      {
                                  break;
                      }
                      check=1;
            }
    }
    fout<<ok;
}