/* -*- coding: utf-8 -*- * * 702.cc: No.702 中央値を求めよ LIMITED - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int N = 10000001; const int MED = (N + 1) / 2; /* typedef */ typedef uint32_t ui; typedef long long ll; /* global variables */ ui x = 0, y = 1, z = 2, w = 3; /* subroutines */ inline ui generate(ui &x, ui &y, ui &z, ui &w) { ui t = (x ^ (x << 11)); x = y; y = z; z = w; w = (w ^ (w >> 19)) ^ (t ^ (t >> 8)); return w; } /* main */ int main() { ui seed; scanf("%u", &seed); ll l = -1, r = (1LL << 32) - 1; while (l + 1 < r) { ll m = (l + r) / 2; int cnt = 0; ui x = seed, y = 1, z = 2, w = 3; for (int i = 0; i < N; i++) { ui ai = generate(x, y, z, w); if (ai <= m) cnt++; } if (cnt >= MED) r = m; else l = m; } printf("%lld\n", r); return 0; }