-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathallocatebooks.cpp
More file actions
58 lines (44 loc) · 843 Bytes
/
allocatebooks.cpp
File metadata and controls
58 lines (44 loc) · 843 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include<bits/stdc++.h>
using namespace std;
bool isfeasible(int pages[],int stu,int n,int mid){
int currpages = 0 ,currstu=1;
for(int i=0;i<n;i++){
if(pages[i]>mid)return false;
if(pages[i]+currpages>mid){
currstu++;
currpages+=pages[i];
}else{
currpages+=pages[i];
}
}
if(currstu>stu)return false;
else return true;
}
int minmaxpages(int pages[],int n,int stu){
int lo = *min_element(pages,pages+n);
int hi=0;
int res = 1e9;
for(int i=0;i<n;i++)hi+=pages[i];
while(lo<=hi){
int mid = (lo+hi)/2;
if(isfeasible(pages,stu,n,mid)){
res = min(res,mid);
hi=mid-1;
}else{
lo = mid+1;
}
}
return res;
}
int main(){
int n;
cin>>n;
int pages[n];
for(int i=0;i<n;i++){
cin>>pages[i];
}
int stu;
cin>>stu;
cout<<minmaxpages(pages,n,stu)<<endl;
return 0;
}