Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- ifstream fin ("transport.in");
- ofstream fout ("transport.out");
- int a[16005] , n , k;
- /// returneaza 1 daca sirul se poate imparti
- ///in cel mult k secvente de suma L
- int Check(int val)
- {
- int nrsecv , s;
- nrsecv = 1;
- s = 0;
- for(int i = 1 ; i <= n ; i++)
- {
- if(a[i] > val)
- return 0;
- s += a[i];
- if(s > val)
- {
- nrsecv++;
- s = a[i];
- }
- }
- return (nrsecv <= k);
- }
- int main()
- {
- int stg = 1 , drp = 16005 * 16005 , mij , poz = 0;
- fin >> n >> k;
- for(int i = 1 ; i <= n ; i++)
- fin >> a[i];
- while(stg <= drp)
- {
- mij = (stg + drp) / 2;
- if(Check(mij))
- {
- poz = mij;
- drp = mij - 1;
- }
- else stg = mij + 1;
- }
- fout << poz << "\n";
- fin.close();
- fout.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment