U444102 reverse 加强

题目描述

题面同 [reverse](https://h.hszxoj.com/d/hzoitg/p/T812?tid=667e65fe6ef739b3adadb695),**但范围不同** 为避免输入误差,输入提供数据生成器,输出直接将所有的结果相加,对 $2^{64}$ 取模。

输入格式

使用见注释 输入 seed 作为种子 ``` #include using namespace std; namespace DATA { constexpr unsigned long long DTA = 1e19 - 9999; long long idx; long long MT[624]; void Seed(long long seed) { idx = 0; MT[0] = seed; for (long long i = 1; i < 624; i++) { long long t = 1812433253 * (MT[i - 1] ^ (MT[i - 1] >> 30)) + i; MT[i] = t & 0xffffffffffffffff; } } void generate() { for (int i = 0; i < 624; i++) { long long y = (MT[i] & 0x8000000000000000) + (MT[(i + 1) % 624] & 0x7fffffffffffffff); MT[i] = MT[(i + 397) % 624] ^ (y >> 1); if (y & 1) MT[i] ^= 2567483615; } } long long Rand() { if (idx == 0) generate(); long long y = MT[idx]; y = y ^ (y >> 11); y = y ^ ((y 18); idx = (idx + 1) % 624; return y; } unsigned long long Getl() { if (Rand() % 50) return Rand() % 10000 + 1; else return Rand() % int(1e19) + 1; } unsigned long long Getr() { if (Rand() % 50) return Rand() % 10000 + DTA; else return Rand() % int(1e19) + 1; } } using DATA::Getl; using DATA::Getr; using DATA::Seed; int main() { unsigned long long seed; cin >> seed; Seed(seed); //Set seed for (int i = 1; i r) swap(l, r); // Get l ans r // Work with l and r } } ```

输出格式

输出所有组的**和**,对 $2^{64}$ 取模。

说明/提示

样例 2 使用了正确输入输出格式 可能有点卡常,但 std 没有特意卡常 实在卡也可以给数据生成器和其他函数开 inline ,可能会快,但 std 没加。 时限在 std 1.5 倍以上 **注意固定 $10^6$ 组** 所有数 $\le 10^{19}$,seed 请用 `unsigned long long` ### 题解: [solution1](https://www.cnblogs.com/xrlong/p/18284564) ——from xrlong [solution2](https://www.cnblogs.com/hzoi-wang54321/p/18284251) ——from wang54321