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...