Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
193993 | luckypet | 折纸 | C++ | 解答错误 | 0 | 2 MS | 248 KB | 1624 | 2025-05-29 14:28:37 |
#include <iostream> #include <vector> #include <algorithm> using namespace std; const int MOD = 1e9 + 7; // 生成折叠后的排列 vector<int> generate_permutation(int k) { int n = 1 << k; vector<int> a(n); for (int i = 0; i < n; i++) { int rev = 0; for (int j = 0; j < k; j++) { rev = (rev << 1) | ((i >> j) & 1); } a[i] = rev; } return a; } // 计算F(l, r) int F(const vector<int>& a, int l, int r) { if (l > r) return 0; int res = 0; if (l % 2 == 0) { // +优先级高 for (int i = l; i <= r; i += 2) { int term = a[i]; if (i + 1 <= r) term += a[i + 1]; if (i == l) res = term; else res ^= term; } } else { // ⊕优先级高 int xor_sum = 0; for (int i = l; i <= r; i++) { xor_sum ^= a[i]; } res = xor_sum; } return res; } int main() { int k; cin >> k; int m, l0, r0; cin >> m >> l0 >> r0; int a_val, b_val, c_val; cin >> a_val >> b_val >> c_val; vector<int> a = generate_permutation(k); int n = a.size(); int h = 0; int l = l0, r = r0; for (int j = 0; j < m; j++) { int f = F(a, l, r); int h_next = ((l ^ r ^ h ^ f) + c_val) % MOD; int l_next = ((l ^ a_val ^ h_next) % (n + 1)) % n; int r_next = ((r ^ b_val ^ h_next) % (n - l_next)) + l_next; h = h_next; l = l_next; r = r_next; } cout << h << endl; return 0; }