Submission #1192562

#TimeUsernameProblemLanguageResultExecution timeMemory
1192562Joon_Yorigami선물상자 (IOI15_boxes)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int delivery(int n, int k, int l, int* positions)
{
    vector<pair<ll,ll>> left;
    vector<pair<ll,ll>> right;
    map<ll,ll> memo;
    ll num;
    for(int i=0;i<n;i++)
    {
        num=positions[i];
        if(memo.find(num)==memo.end())
        {
            memo[num]=1;
        }
        else
        {
            memo[num]+=1;
        }
    }
    for(auto p:memo)
    {
        if(p.first<=l/2)
        {
            left.push_back(p);
        }
        else
        {
            right.push_back(p);
        }
    }
    ll leftoverright,leftoverleft,ans;
    ans=0;
    leftoverright=0;
    leftoverleft=0;
    reverse(right.begin(),right.end());
    for(int i=left.size()-1;i>=0;i--)
    {
        if(leftoverleft>0)
        {
            left[i].second-=leftoverleft;
            leftoverleft=0;
        }
        if(left[i].second<0)
        {
            leftoverleft=abs(left[i].second);
            continue;
        }
        ans+=(left[i].second+k-1)/k*2*left[i].first;
        leftoverleft=0;
        if(left[i].second%k>0)
        {
            leftoverleft=k-(left[i].second%k);
        }
    }
    for(int i=right.size()-1;i>=0;i--)
    {
        if(leftoverright>0)
        {
            right[i].second-=leftoverright;
            leftoverright=0;
        }
        if(right[i].second<0)
        {
            leftoverright=abs(right[i].second);
            continue;
        }
        ans+=(right[i].second+k-1)/k*2*(l-right[i].first);
        leftoverright=0;
        if(right[i].second%k>0)
        {
            leftoverright=k-(right[i].second%k);
        }
    }
    if(right.size()>0 && left.size()>0 && leftoverleft!=0 && leftoverright!=0 && leftoverleft>=(k-leftoverright) && l<left[0].first*2+right[0].first*2)
    {
        ans-=left[0].first*2+right[0].first*2;
        ans+=l;
    }
    return ans;
}
/*
int main()
{
    int n,k,l,owo;
    int positions[10000];
    cin >> n >> k >> l;
    for(int i=0;i<n;i++)
    {
        cin >> owo;
        positions[i]=owo;
    }
    cout << delivery(n,k,l,positions) << endl;
}
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...