当前位置: 首页 > news >正文

2025 ICPC 网络赛2 E

E. Zero

矩阵快速幂优化 dp。

考虑第一个数任意选,有 \(2^m\) 种选择,那么第 \(2\sim n-1\) 就有 \(2^{m-1}\) 种选择,因为最后要和前面的异或结果为 \(0\) ,所以最后一位是固定的,但是此时最后一位可能和倒数第二位相等,所以 \(1\sim n-2\) 的异或结果就肯定为 \(0\),设 \(f_i\) 表示序列长度为 \(i\) 时的答案,那么转移方程为:

\[f_n = 2^m\cdot (2^m - 1)^{n-2} - f_{n-2} \cdot (2^m - 1) \]

注意到 \(n\) 最大为 \(1\times10^9\),那么可以采取矩阵快速幂优化转移。
则有:

\[ \begin{bmatrix} f_{n} \\ f_{n-1} \\ f_{n-2} \\ (2^m-1)^{n-1} \end{bmatrix} = \begin{bmatrix} 0 & -(2^m-1) & 0 & 2^m \\ 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 2^m-1 \end{bmatrix} \begin{bmatrix} f_{n-1} \\ f_{n-2} \\ f_{n-3} \\ (2^m-1)^{n-2} \end{bmatrix} \]

代码中 Z 类型为自动取模类。

using Z = ModInt<MOD[0]>;template<class T>
struct Matrix {i64 N;vector<vector<T>> A;Matrix() : N(0) {}Matrix(int n) : N(n), A(n, vector<T>(n, 0)) {}Matrix(const vector<vector<T>>& mat) {assert(!mat.empty() && !mat[0].empty()); // 确保非空N = mat.size();A = mat;}const vector<T>& operator[](int i) const {return A[i];}Matrix operator*(const Matrix &b) const {assert(N == b.N);Matrix res(N);for (int i = 0; i < N; i++) {for (int k = 0; k < N; k++) {T tmp = A[i][k];if (tmp == 0) {continue;}for (int j = 0; j < N; j++) {res.A[i][j] += tmp * b.A[k][j];}}}return res;}//快速幂实现Matrix power(Matrix res, i64 k) const {Matrix base = *this;while (k) {if (k & 1) {res = res * base;}base = base * base;k >>= 1;}return res;}
};void solve() {int n, m;cin >> n >> m;vector<Z> f(4);Z m2 = power<Z>(2, m);f[1] = 1, f[2] = 0;f[3] = m2 * (m2 - 1) - (m2 - 1);if (n <= 3) {cout << f[n] << "\n";return;}vector a(4, vector<Z>(4));auto base = a;a[0][1] = 1 - m2, a[0][3] = m2;a[1][0] = 1;a[2][1] = 1;a[3][3] = m2 - 1;base[0][0] = f[3], base[1][0] = f[2];base[2][0] = f[1], base[3][0] = (m2 - 1) * (m2 - 1);Matrix<Z> A(a);A = A.power(A, n - 4);A = A * base;cout << A[0][0] << "\n";}
int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int t;cin >> t;while (t--) {solve();}return 0;
}
http://www.wxhsa.cn/company.asp?id=4829

相关文章:

  • 偏移寻址
  • 金融业-数字化转型大赛-网络安全赛道部分wp
  • Mysql查找含字符串表字段
  • MySQL注意事项与规范 - 实践
  • 真正的元推理,不需要人类的认可,恰恰是人类追求元推理,只有元推理才能彻底解放人类
  • 西电微机原理-第三章 Intel处理器指令系统及汇编语言(5)
  • 西电微机原理-第五章 存储技术
  • 西电微机原理-第七章 常用接口器件
  • CF1264D1 Beautiful Bracket Sequence (easy version)
  • 西电微机原理-第六章 输入输出技术
  • 【FAQ】应用A如何使用应用B内的文件?
  • OpenStack Cinder 创建卷
  • 西电微机原理-第二章 Intel单核处理器
  • 二叉树的迭代遍历(非递归)
  • 记录---用好了 defineProps 才叫会用 Vue3,90% 的写法都错了
  • 今日流水账-2025年9月15日
  • c#给原文件重命名
  • tcpdump常用随笔
  • 2025年HR经理必备:10款高效人力资源管理软件推荐
  • GAS中GA变量数据的同步
  • 提升员工绩效的5大人才管理软件评测与分析
  • 【触想智能】工业显示屏与普通显示屏的八大区别以及应用领域分析
  • LLaVA- Improved Baselines with Visual Instruction Tuning - jack
  • 042-WEB 攻防:PHP 应用 MYSQL 架构 SQL 注入 跨库查询 文件读写 权限操作
  • Dsu On Tree 笔记
  • 西电微机原理-第一章 序论:微型计算机概述
  • Liunx 硬盘扩容
  • 船舶航向控制算法
  • pyside6 1
  • 基于WSL下载Hadoop和HBASE