Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstdlib>
- using namespace std;
- int ans=-1;
- void two(int l,int r,int* c,int m,int n){
- bool enough=false;//這樣能做完
- int mid=(l+r)/2;//每個人不能超過的工作量(最多的工作量)
- int w=1;//現在準備抄第幾個古文
- for(int i=1;i<=m;i++){
- int cur_work=0;
- if(w>n){
- break;
- }
- while(cur_work+c[w]<=mid){
- cur_work+=c[w];
- w++;
- if(w>n){
- enough=true;
- break;
- }
- }
- }
- if(enough){
- ans=mid;
- if(l==r){
- return;
- }
- two(l,(l+r)/2,c,m,n);
- }
- else{
- if(l==r){
- return;
- }
- two((l+r)/2+1,r,c,m,n);
- }
- }
- int main() {
- int T,N,M;
- int array[T];
- for(int i=0;i<T;i++){
- int all=0;
- scanf("%d %d",&N,&M);
- int c[100001]={0};
- for(int j=1;j<=N;j++){
- scanf("%d",&c[j]);
- all+=c[j];
- }
- two(1,all,c,M,N);
- cout << ans << endl;
- ans=-1;
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment