Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define ll long long int
- bool check(ll capacity,ll given[],ll n,ll m){
- ll i,j,k,l;
- ll temp=0,cnt=1;
- for(i=0;i<=n;i++){
- if(temp+given[i]<=capacity)temp+=given[i];
- else
- {
- temp=given[i];
- cnt++;
- }
- }
- if(cnt>m+1)return false;
- return true;
- }
- int main(){
- ll i,t,n,j,k,given[100010],c,m,hi,lo,mid,ans,total,lowest;
- scanf("%lld",&t);
- for(i=1;i<=t;i++){
- total=lowest=0;
- scanf("%lld %lld",&n,&m);
- for(j=0;j<=n;j++){
- scanf("%lld",&given[j]);
- total+=given[j];
- if(given[j]>lowest)lowest=given[j];
- }
- lo=lowest;
- hi=total;
- while(lo<=hi){
- mid=(lo+hi)/2;
- if(check(mid,given,n,m)){
- ans=mid;
- hi=mid-1;
- }
- else{
- lo=mid+1;
- }
- }
- printf("Case %lld: %lld\n",i,ans);
- ll sum=0,cnt=0;
- for(int sam=0;sam<=n;sam++){
- if(sum+given[sam]>ans){
- printf("%lld\n",sum);
- c++;
- sum=given[sam];
- }
- else if(sum+given[sam]==ans || n-sam==m-c){
- printf("%lld\n",sum+given[sam]);
- c++;
- sum=0;
- }
- else
- {
- sum+=given[sam];
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement