Cod sursa(job #3298203)

Utilizator MiculSkibidiPitPitPITPIT MiculSkibidiPitPit Data 27 mai 2025 23:00:58
Problema Transport Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

ifstream cin("transport.in");
ofstream cout("transport.out");

int n,k;
int vinc[100001];

struct Fiu{
    int tot,st,dr,nrc;
};

bool intreg(int sum){
    int s=0,cnt=0;
    for(int i=0; i<n; i++){
        if(s<sum)
            s+=vinc[i];
        else{
            s=vinc[i];
            cnt++;
        }
    }
    if(s>=sum)
        cnt++;
    if(cnt<k)
        return false;
    return true;
}

bool comp(Fiu a,Fiu b){
    if(a.tot==b.tot)
        return a.st<b.st;
    return a.tot<b.tot;
}

bool comp2(Fiu a,Fiu b){
    return a.st<b.st;
}

vector<Fiu>vfin;

int main(){
    int s=0,stpoz=0,i=0,cnt=0,sum=0,st=0,dr,mid;
    cin>>n>>k;
    for(int i=0;i<n;i++){
        cin>>vinc[i];
        sum+=vinc[i];
    }
    dr=sum+1;
    while(st<dr){
        mid=(st+dr+1)/2;
        if(intreg(mid)==true)
            st=mid;
        else
            dr=mid-1;
    }
    cout<<dr<<endl;
    dr--;
    while(i<n){
        if(cnt==k-1){
            s=0;
            while(i<n){
                s+=vinc[i];
                i++;
            }
        }
        while(i<n && s+vinc[i]<dr){
            s+=vinc[i];
            i++;
        }
        if(i<n){
            s+=vinc[i];
            i++;
        }
        cnt++;
        vfin.push_back({s,stpoz,i-1});
        s=0;
        stpoz=i;
    }
    sort(vfin.begin(),vfin.end(),comp);
    for(i=0;i<vfin.size();i++)
        vfin[i].nrc=k-i;
    sort(vfin.begin(),vfin.end(),comp2);
    for(i=0;i<vfin.size();i++)
        cout<<vfin[i].nrc<<" "<<vfin[i].dr-vfin[i].st+1<<'\n';

   return 0;
}