제출 #63747

#제출 시각아이디문제언어결과실행 시간메모리
63747KubalionzzaleBoxes with souvenirs (IOI15_boxes)C++14
0 / 100
2 ms376 KiB
#include "boxes.h"
#include <map>
#include <iostream>
#include <algorithm>

long long delivery(int n, int k, int l, int p[]) {

    if (n == 1)
    {
        return std::min(p[0] * 2, (l - p[0]) * 2);
    }

    int here = n;
    for (int i = 0; i < n; ++i)
    {
        if (p[i] > l - p[i] && here == n)
        {
            here = i;
        }
        else if (here != n)
        {
            p[i] = l - p[i];
        }
    }

    if (here == 0)
    {
        int cur = k;
        long long int sum = p[n - 1];
        for (int i = n - 2; i >= 0; --i)
        {
            if (cur == 0)
            {
                sum += p[i + 1] * 2LL + p[i] - p[i + 1];
                cur = k - 1;
            }
            else
            {
                sum += p[i] - p[i + 1] * 1LL;
                --cur;
            }
        }

        return sum + p[0] * 1LL;
    }
    else if (here == n)
    {
        int cur = 0;
        long long int sum = p[0];
        for (int i = 1; i < n; ++i)
        {
            if (cur == 0)
            {
                sum += p[i - 1] * 2LL + p[i] - p[i - 1];
                cur = k - 1;
            }
            else
            {
                sum += p[i] - p[i - 1] * 1LL;
                --cur;
            }
        }

        return sum + p[n - 1] * 1LL;
    }

    long long int sumleft = p[0], leftleft = -1;
    int cur = k;

    for (int i = 1; i < here; ++i)
    {
        if (cur == 0)
        {
            sumleft += p[i - 1] * 2 + p[i] - p[i - 1];
            cur = k - 1;
        }
        else
        {
            sumleft += p[i] - p[i - 1];
            --cur;
        }
    }

    sumleft += p[here - 1];
    leftleft = cur;

    long long int sumright = p[n - 1], leftright = -1;
    cur = k;

    for (int i = n - 2; i >= here; --i)
    {
        if (cur == 0)
        {
            sumright += p[i + 1] * 2 + p[i] - p[i + 1];
            cur = k - 1;
        }
        else
        {
            sumright += p[i] - p[i + 1];
            --cur;
        }
    }

    sumright += p[here];
    leftright = cur;

    return sumleft + sumright;
}

컴파일 시 표준 에러 (stderr) 메시지

boxes.cpp: In function 'long long int delivery(int, int, int, int*)':
boxes.cpp:67:35: warning: variable 'leftleft' set but not used [-Wunused-but-set-variable]
     long long int sumleft = p[0], leftleft = -1;
                                   ^~~~~~~~
boxes.cpp:87:40: warning: variable 'leftright' set but not used [-Wunused-but-set-variable]
     long long int sumright = p[n - 1], leftright = -1;
                                        ^~~~~~~~~
#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...