Submission #222270

#TimeUsernameProblemLanguageResultExecution timeMemory
222270BruteforcemanGap (APIO16_gap)C++11
100 / 100
85 ms3316 KiB
#include "bits/stdc++.h"
#include "gap.h"
using namespace std;
const long long maxV = 1e18;

long long findGap(int T, int N)
{       
    long long mx, mn;
    MinMax(0, maxV, &mn, &mx);
    if(T == 1) {
        vector <long long> left, right;
        left.push_back(mn); right.push_back(mx);
        while(left.size() + right.size() < N) {
            long long p, q;
            MinMax(mn + 1, mx - 1, &p, &q);
            tie(mn, mx) = make_pair(p, q);
            left.push_back(mn);
            right.push_back(mx);
        }
        for(auto i : right) left.push_back(i);
        sort(left.begin(), left.end());
        long long ans = 0;
        for(int i = 1; i < left.size(); i++) {
            ans = max(ans, left[i] - left[i - 1]);
        }
        return ans;
    }
    long long lower = (mx - mn + N - 2) / (N - 1);
    long long cur = mn + 1;
    vector <long long> v ({mn});
    int cnt = N - 1; 
    while(cur <= mx) {
        long long p, q;
        MinMax(cur, min(mx, cur + lower), &p, &q);    
        cur += lower + 1;
        if(p != -1) {
            if(!v.empty()) {
                lower = max(lower, p - v.back());
            }
            v.push_back(p);
            v.push_back(q);
            cnt -= (p == q) ? 1 : 2;
        } else {
            lower = max(lower, min(mx, cur) - v.back());
        }
        if(cnt) lower = max(lower, (mx - v.back() + cnt - 1) / cnt);
        // cout << cur << " " << min(mx, cur + lower - 1) << " " << p << " " << q << endl;
    }
	return lower;
}

Compilation message (stderr)

gap.cpp: In function 'long long int findGap(int, int)':
gap.cpp:13:42: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         while(left.size() + right.size() < N) {
               ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
gap.cpp:23:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i = 1; i < left.size(); i++) {
                        ~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...