Advertisement
SuitNdtie

Energy Charger

May 1st, 2019
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.26 KB | None | 0 0
  1. #include<stdio.h>
  2. typedef long long int ll;
  3. int main()
  4. {
  5.     int n,T;
  6.     scanf("%d %d",&n,&T);
  7.     ll arr[n];
  8.     ll L = 1; //max elem
  9.     ll R = 0; //sum elem
  10.     for(int i = 0 ; i < n ; i ++){
  11.         scanf("%lld",&arr[i]);
  12.         if(arr[i] > L)L = arr[i];
  13.         R += arr[i];
  14.     }
  15.     if(T == 1){
  16.         printf("-1");
  17.         return 0;
  18.     }
  19.     ll aL=L-1,aR=R+1;
  20.    
  21.     ll l = L , r = R;
  22.     while(l <= r){
  23.         ll m = (l+r)/2;
  24.        
  25.         ll EnergyNow = 0;
  26.         ll TotalCharge = 0;
  27.         for(int i = 0 ; i < n ; i ++){
  28.             if(EnergyNow >= arr[i]){
  29.                 EnergyNow -= arr[i];
  30.             }else{
  31.                 EnergyNow = m - arr[i];
  32.                 TotalCharge++;
  33.             }
  34.             if(TotalCharge > T){
  35.                 break;
  36.             }
  37.         }
  38.         if(TotalCharge <= T){
  39.             if(TotalCharge == T){
  40.                 aL = m;
  41.             }
  42.             r = m - 1;
  43.         }else{
  44.             l = m + 1;
  45.         }
  46.     }
  47.     l = L ; r = R;
  48.     while(l <= r){
  49.         ll m = (l+r)/2;
  50.        
  51.         ll EnergyNow = 0;
  52.         ll TotalCharge = 0;
  53.         for(int i = 0 ; i < n ; i ++){
  54.             if(EnergyNow >= arr[i]){
  55.                 EnergyNow -= arr[i];
  56.             }else{
  57.                 EnergyNow = m - arr[i];
  58.                 TotalCharge++;
  59.             }
  60.             if(TotalCharge > T){
  61.                 break;
  62.             }
  63.         }
  64.         if(TotalCharge >= T){
  65.             if(TotalCharge == T){
  66.                 aR = m;
  67.             }
  68.             l = m + 1;
  69.         }else{
  70.             r = m - 1;
  71.         }
  72.     }
  73. //  printf("%lld",(aR-aL+1 == ((L-1) - (R+1) + 1) ? -1 : aR-aL+1));
  74.     printf("%lld",aR-aL+1);
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement