信息
- ID
- 1677
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
把能够被同一次操作同时标记的两条边连起来,所有网格边会沿对角方向分成若干互不影响的链。
对一条含 k 条边的链,可得到的标记集合等价于在路径上选择若干互不相邻的二元组。设其方案数为 ak,按最左边是否被标记分类可得 a0=a1=1、ak=ak−1+ak−2。
令 n=min(H,W)、m=∣H−W∣。整理所有链的长度后,答案为 (a2a4⋯a2n)2a2n+1m。预处理斐波那契型数列 ai,再预处理偶数下标的前缀乘积 bn=∏i=1na2i;每组询问输出 bn2a2n+1m,幂用快速幂计算。
预处理复杂度为 O(max(H,W)),每组询问复杂度为 O(log∣H−W∣),空间复杂度为 O(max(H,W))。