Submission #95703

#TimeUsernameProblemLanguageResultExecution timeMemory
95703jeffGap (APIO16_gap)C++14
100 / 100
237 ms2288 KiB
#include <bits/stdc++.h>
#include "gap.h"
using namespace std;
 
inline unsigned long long mde(unsigned long long a, unsigned long long b, unsigned long long c) {
    unsigned long long t = 0, y = 0, z = 0, i;
    stack<unsigned long long> st;
    while (b) st.push(b % 2), b /= 2;
    while (!st.empty()) {
        z <<= 1;
        y <<= 1;
        z += a * st.top();
        st.pop();
        y += z / (1LL << 62);
        z %= (1LL << 62);
    }
    t += y / c;
    y %= c;
    for (i = 0; i < 62; ++i) {
        y <<= 1;
        z <<= 1;
        t <<= 1;
        y += z / (1LL << 62);
        z %= (1LL << 62);
        t += y / c;
        y %= c;
    }
    return t;
}
 
vector<long long> v;
 
long long findGap(int T, int N) {
    long long l, r, y, z, ls = -1, rs = 0, a, b = 0, i;
    if (T == 1) {
        l = 0;
        r = 1000000000000000000;
        for (i = 0; i < (N + 1) / 2; ++i) {
            MinMax(l, r, &a, &b);
            if (a < 0 && b < 0) break;
            v.push_back(a);
            v.push_back(b);
            l = a + 1;
            r = b - 1;
            if (l > r) break;
        }
        sort(v.begin(), v.end());
        for (i = 1; i < v.size(); ++i) if (v[i - 1] > -1) rs = max(rs, v[i] - v[i - 1]);
        return rs;
    }
    MinMax(0, 1000000000000000000, &y, &z);
    for (i = 0; i < N - 1; ++i) {
        a = y + mde(z - y, i, N - 1);
        b = y + mde(z - y, i + 1, N - 1) - 1;
        if (a >= b) continue;
        MinMax(a, b, &l, &r);
        if (l < 0 && r < 0) continue;
        if (ls > -1) rs = max(rs, l - ls);
        ls = r;
    }
	return max(rs, z - ls);
}

Compilation message (stderr)

gap.cpp: In function 'long long int findGap(int, int)':
gap.cpp:48:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (i = 1; i < v.size(); ++i) if (v[i - 1] > -1) rs = max(rs, v[i] - v[i - 1]);
                     ~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...