Submission #163880

#TimeUsernameProblemLanguageResultExecution timeMemory
163880KubalionzzaleGap (APIO16_gap)C++14
100 / 100
106 ms4208 KiB
#include "gap.h"
#include <vector>
#include <algorithm>
#include <assert.h>
#include <iostream>

long long findGap(int T, int n)
{
    long long int minValue = 0, maxValue = 1e18;
    std::vector<long long int> vec;
    if (T == 1)
    {
        long long int left = 0, right = 0;

        do
        {
            MinMax(minValue, maxValue, &left, &right);

            if (left != -1)
                vec.push_back(left);
            if (right != left)
                vec.push_back(right);

            minValue = left + 1;
            maxValue = right - 1;
        } while (minValue <= maxValue && left != -1 && right != -1 && vec.size() < n);

        std::sort(vec.begin(), vec.end());
        long long int maxi = 0;
        for (int i = 1; i < vec.size(); ++i)
        {
            if (vec[i] - vec[i - 1] > maxi)
                maxi = vec[i] - vec[i - 1];
        }

        return maxi;
    }
    else
    {
        long long int left = 0, right = 0;

        MinMax(minValue, maxValue, &left, &right);
        if (n == 2)
            return right - left;
        vec.push_back(left);
        vec.push_back(right);
        left = left + 1;
        right = right - 1;

        long long int dist = (right - left + 1) / (n - 2);
        long long int modul = (right - left + 1) % (n - 2);

        long long int nxt;
        long long int l, r;
        int cnt = 0;
        long long int i = left;
//        std::cout << left << " " << dist << " " << modul << " " << right << "\n";
        for (int cnt = 0; cnt < n - 2; ++cnt)
        {
            if (modul > 0)
            {
                nxt = i + dist;
                --modul;
            }
            else
                nxt = i + dist - 1;

            MinMax(i, nxt, &l, &r);
            if (l != -1)
            {
                vec.push_back(l);
                if (l != r)
                    vec.push_back(r);
            }

            i = nxt + 1;
        }

        std::sort(vec.begin(), vec.end());
        long long int maxi = 0;
        for (int i = 1; i < vec.size(); ++i)
        {
            if (vec[i] - vec[i - 1] > maxi)
                maxi = vec[i] - vec[i - 1];
        }

        return maxi;
    }
}

Compilation message (stderr)

gap.cpp: In function 'long long int findGap(int, int)':
gap.cpp:26:82: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         } while (minValue <= maxValue && left != -1 && right != -1 && vec.size() < n);
                                                                       ~~~~~~~~~~~^~~
gap.cpp:30:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int i = 1; i < vec.size(); ++i)
                         ~~^~~~~~~~~~~~
gap.cpp:81:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int i = 1; i < vec.size(); ++i)
                         ~~^~~~~~~~~~~~
gap.cpp:55:13: warning: unused variable 'cnt' [-Wunused-variable]
         int cnt = 0;
             ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...