Advertisement
Slayerfeed

TOI10 CrazyAdmin

May 14th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.06 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3.  
  4. using namespace std;
  5.  
  6. int package(int n ,int room[] ,int cap){
  7.     int adsl_cnt = 1 ,curr_sum = 0;
  8.     for(int i=0;i<n;++i){
  9.         if (room[i] > cap){
  10.             return 1000000;
  11.         }
  12.         if(room[i]+curr_sum>cap){
  13.             ++adsl_cnt;
  14.             curr_sum = 0;
  15.         }
  16.         curr_sum+= room[i];
  17.     }
  18.     return adsl_cnt;
  19. }
  20.  
  21. int findcap(int n , int room[] ,int k){
  22.     int max_room = 0, sum=0;
  23.     for(int i=0;i<n;++i){
  24.         if(max_room<room[i]){
  25.             max_room = room[i];
  26.         }
  27.         sum = sum + room[i];
  28.     }
  29.  
  30.     int l = max_room , r = sum , ans =sum;
  31.     while(l<=r){
  32.         int m = (l+r)/2;
  33.         if(package(n,room,m)> k){
  34.             l = m+1;
  35.         }
  36.         else{
  37.             if(m<ans){
  38.                 ans = m;
  39.             }
  40.             r= m-1;
  41.         }
  42.     }
  43.  
  44.     return ans;
  45. }
  46. int main(){
  47.     int m ,o;
  48.     scanf("%d%d",&m,&o);
  49.     int room[o+1];
  50.     for(int i=0;i<o;++i){
  51.         scanf("%d",&room[i]);
  52.     }
  53.     cout << findcap(o,room,m);
  54.  
  55.     return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement