Cod sursa(job #479021)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 21 august 2010 21:46:54
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
# include <fstream>
# include <cstdio>
using namespace std;
    int n,k,st[16001],i,cit;
	
	int cb_pmem (int in,int sf,int find){
		int ret=0;
		while (in<=sf){
			int m= (in+sf) >> 1;
			if (st[m]<=find){
				ret=m;
				in=m+1;
			}
			else sf=m-1;
		}
		return ret;
	}
	
	int corect (int m){
		int cnt=k,s=0,poz=1,pac=0;
		for (;cnt && poz;--cnt){
			poz=cb_pmem (1,n,m+s);
			s=st[poz];
			pac=poz;
			if (pac>=n) return 1;
		}
        return 0;	
	}		
	
	int cb (int in,int sf){
		int ret=0;
		while (in<=sf){
			int m= (in+sf) >> 1 , var;
			var=corect (m);
			if (var){//cauti unul mai mic si mai corect
				ret=m;
				sf=m-1;
			}
			else//daca e 0
				in=m+1;
		}
		return ret;
	}
	
	int main (){
		ifstream f ("transport.in");
		freopen ("transport.out","w",stdout);
		f>>n>>k;
		for (i=1;i<=n;++i){
			f>>cit;
			st[i]=st[i-1]+cit;
		}
		printf ("%d\n",cb (1,st[n]));
		return 0;
	}