Cod sursa(job #1260066)
Utilizator | 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;
}