Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2020
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long int
  4. bool check(ll capacity,ll given[],ll n,ll m){
  5. ll i,j,k,l;
  6. ll temp=0,cnt=1;
  7. for(i=0;i<=n;i++){
  8. if(temp+given[i]<=capacity)temp+=given[i];
  9. else
  10. {
  11. temp=given[i];
  12. cnt++;
  13. }
  14.  
  15. }
  16. if(cnt>m+1)return false;
  17. return true;
  18.  
  19. }
  20.  
  21. int main(){
  22.  
  23. ll i,t,n,j,k,given[100010],c,m,hi,lo,mid,ans,total,lowest;
  24. scanf("%lld",&t);
  25. for(i=1;i<=t;i++){
  26. total=lowest=0;
  27.  
  28. scanf("%lld %lld",&n,&m);
  29. for(j=0;j<=n;j++){
  30. scanf("%lld",&given[j]);
  31. total+=given[j];
  32. if(given[j]>lowest)lowest=given[j];
  33.  
  34. }
  35. lo=lowest;
  36. hi=total;
  37. while(lo<=hi){
  38. mid=(lo+hi)/2;
  39. if(check(mid,given,n,m)){
  40. ans=mid;
  41. hi=mid-1;
  42.  
  43. }
  44. else{
  45. lo=mid+1;
  46. }
  47.  
  48.  
  49. }
  50. printf("Case %lld: %lld\n",i,ans);
  51. ll sum=0,cnt=0;
  52. for(int sam=0;sam<=n;sam++){
  53. if(sum+given[sam]>ans){
  54. printf("%lld\n",sum);
  55. c++;
  56. sum=given[sam];
  57. }
  58. else if(sum+given[sam]==ans || n-sam==m-c){
  59. printf("%lld\n",sum+given[sam]);
  60. c++;
  61. sum=0;
  62.  
  63. }
  64. else
  65. {
  66. sum+=given[sam];
  67. }
  68.  
  69. }
  70.  
  71. }
  72.  
  73.  
  74.  
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement