尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

CF 1603F October 18, 2017

CF 1603F October 18, 2017
📅 发布时间:2026/6/18 3:36:28
www

为什么会是 *2700???

首先考虑一下 \(x\) 的作用是什么,感受一下,会感觉 \(0\) 或许会比较特殊(如果做点线性基的题能感受到)。

首先考虑 \(x = 0\),这就相当于要求 \(n\) 个 \([0, 2^k)\) 元素满秩的方案数,考虑类似线性基,依次加入元素,那么加入第 \(i\) 个元素时就不能被前 \(i - 1\) 个元素线性表示,所以方案数是 \(\prod\limits_{i = 1}^n (2^k - 2^{i - 1})\)。
因为 \(n\le k\) 时才可能放不出 \(0\),所以 \(n > k\) 时答案为 \(0\),\(n\le k\) 时 \(\mathcal{O}(k)\) 计算。

接下来考虑 \(x\not = 0\) 的情况,会发现 \(x\not = 0\) 的答案是相同的(我并不知道怎么解释,但是从后面的做法中可以看出来这一点)。

对于不能凑出 \(x\),一个想法是放入 \(x\) 变为不能凑出 \(0\)。

于是对于 \(a_i\),根据 \(a_{1\sim i - 1}\) 和 \(x\) 就有两种情况:

  1. \(a_i\) 能被 \(a_{1\sim i - 1}\) 线性表示。
  2. \(a_i\) 不能被 \(x\) 及 \(a_{1\sim i - 1}\) 线性表示。
    (其实就是 \(a_i\) 不能被 \(x\) 和 \(a_{1\sim i - 1}\) 的部分线性表示的转义。)

于是可以尝试 dp,记 \(f_{i, j}\) 为放入了 \(a_{1\sim i}\),秩为 \(j\) 的方案数。
转移根据上文可以得到 \(f_{i, j} = f_{i - 1, j}\times 2^{j - 1} + f_{i - 1, j - 1}\times (2^k - 2^{j - 1})\)。
初值即为 \(f_{0, 1} = 1\),最终答案为 \(\sum_{i = 0}^k f_{n, i}\)。

因为答案所要求的第一维都是 \(n\),尝试枚举第二维然后代数推导,即考虑代数推导 \(f_{n, i}\) 的值。

考虑转移的第二部分,即第二维 \(+1\) 时乘上的值都是 \((2^k - 2_{j - 1})\),那么 \(f_{n, i}\) 就至少有一个 \(\prod\limits_{j = 2}^i (2^k - 2^{j - 1})\) 的公因式,就只需要考虑第一部分的贡献和两部分拼起来的贡献了。

此时考虑直接枚举每个 \(j\) 乘了多少个 \(2^{j - 1}\),会发现这恰好也数出了组合的方案数,因为整个过程是有序的,所以可以直接通过乘了多少个 \(2^{j - 1}\) 推出每次 \(j\gets j + 1\) 的位置。

所以有:

\[\begin{align*} f_{n, i} = \prod\limits_{j = 2}^i (2^k - 2^{j - 1}) \sum\limits_{x_1 + x_2 + \cdots + x_i = n - i + 1} \prod\limits_{t = 1}^i 2^{x_t(t - 1)} \end{align*} \]

后面这个和式只能尝试转为生成函数推导:

\[\begin{align*} F_i(x) &= \prod\limits_{j = 1}^i \frac{1}{1 - 2^{j - 1}x}\\ f_{n, i} &= \prod\limits_{j = 2}^i (2^k - 2^{j - 1}) [x^{n - i + 1}]F_i(x) \end{align*} \]

\(F_i(x)\) 的求解似乎不能用分式分解(我尝试了,没化出来 qaq),考虑观察 \(x\),发现前面都带有 \(2^{j - 1}x\) 的系数,这启发对 \(x\) 前配凑系数:

\[\begin{align*} G_i(x) = F_i(2x) = \prod\limits_{j = 1}^i \frac{1}{1 - 2^j x} \end{align*} \]

那么可以知道:

\[\begin{align*} [x^m]G_i(x) &= 2^m[x^m]F_i(x)\\ G_i(x)(1 - 2^i x) &= F_i(x)(1 - x) \end{align*} \]

于是对第二个式子两侧取 \([x^m]\) 可以得到:

\[\begin{align*} [x^m]G_i(x) - 2^i[x^{m - 1}]G_i(x) &= [x^m]F_i(x) - [x^{m - 1}]F_i(x)\\ 2^m[x^m]F_i(x) - 2^{i + m - 1}[x^{m - 1}]F_i(x) &= [x^m] F_i(x) - [x^{m - 1}]F_i(x)\\ (2^m - 1)[x^m]F_i(x) &= (2^{i + m - 1} - 1)[x^{m - 1}]F_i(x)\\ [x^m]F_i(x) &= \frac{2^{i + m - 1} - 1}{2^m - 1}[x^{m - 1}]F_i(x) \end{align*} \]

通过边界情况 \([x^0]F_i(x) = 1\) 便可得到:

\[\begin{align*} [x^m]F_i(x) = \prod\limits_{j = 1}^m \frac{2^{i + j - 1} - 1}{2^j - 1} \end{align*} \]

所以:

\[\begin{align*} f_{n, i} &= \prod\limits_{j = 2}^i (2^k - 2^{j - 1}) \prod\limits_{j = 1}^{n - i + 1}\frac{2^{i + j - 1} - 1}{2^j - 1} \end{align*} \]

但是我们想要做到 \(\mathcal{O}(k)\),于是尝试找一些递推关系,可以发现:

\[\begin{align*} f_{n, 1} &= 1\times 1 = 1\\ f_{n, i} &= f_{n, i - 1}\times (2^k - 2^{i - 1})\times \frac{2^{n - i + 2} - 1}{2^i - 1} \end{align*} \]

递推要做到 \(\mathcal{O}(1)\),就需要先 \(\mathcal{O}(\log \operatorname{mod})\) 得到 \(2^{n + 0\sim 1}\)(看实现),每次乘 \(\frac{1}{2}\),分母逆元我用的是 \(\mathcal{O}(n + \log \operatorname{mod})\) 处理任意序列 \(a_{1\sim n}\) 的逆元的方法。

最后总时间复杂度为 \(\mathcal{O}(\sum k + T\log \operatorname{mod})\)。

#include <bits/stdc++.h>using ll = long long;constexpr ll mod = 998244353;
constexpr ll inv2 = 499122177;constexpr int K = 1e7;inline ll qpow(ll a, ll b) {ll v = 1;for (; b; b >>= 1, a = a * a % mod) {if (b & 1) {v = v * a % mod;}}return v;
}ll pw[K + 1], inv[K + 1];
ll a[K + 1], b[K + 1], ib[K + 1];
inline void init() {pw[0] = 1;for (int i = 1; i <= K; i++) {pw[i] = pw[i - 1] * 2 % mod;}b[0] = 1;for (int i = 1; i <= K; i++) {a[i] = pw[i] - 1;b[i] = b[i - 1] * a[i] % mod;}ib[K] = qpow(b[K], mod - 2);for (int i = K; i >= 1; i--) {ib[i - 1] = ib[i] * a[i] % mod;inv[i] = b[i - 1] * ib[i] % mod;}
}inline void solve() {int n, k, x;scanf("%d%d%d", &n, &k, &x);if (x == 0) {if (n > k) {return puts("0"), void();}ll ans = 1;for (int i = 1; i <= n; i++) {ans = ans * (pw[k] - pw[i - 1] + mod) % mod;}return printf("%lld\n", ans), void();}ll ans = 0, v1 = 1, v2 = 1, pwi = qpow(2, n + 1);for (int i = 1; i <= std::min(n + 1, k); i++) {if (i >= 2) {v1 = v1 * (pw[k] - pw[i - 1] + mod) % mod;pwi = pwi * inv2 % mod;v2 = v2 * inv[i - 1] % mod * (pwi - 1) % mod;}ans = (ans + v1 * v2) % mod;}printf("%lld\n", ans);
}int main() {init();int t;scanf("%d", &t);while (t--) {solve();}return 0;
}

相关新闻

  • 使用Miniconda安装PyTorch Profiler分析模型性能瓶颈
  • 如何在Miniconda环境中配置PyTorch与CUDA加速
  • 2025最新云南可行性研究报告品牌top5榜单公布,服务覆盖昆明/曲靖/文山/保山/昭通等地优质公司专业评测及选择指南,助力项目高效落地 - 全局中转站

最新新闻

  • 2026 石家庄高端婚恋推荐榜 TOP1|将爱婚恋:燕赵纸媒背书,本地精英本硕博专属严选平台 - 星际AI
  • 2026 年招标智能清标工具客观测试与高合规使用指南 - 资讯纵览
  • 上班族在职备考法考:四大热门APP实测,哪款能帮你充分利用碎片时间 - 信息热点
  • Pandas多维聚合五大生产级模式:跨列异构、自定义函数、滚动窗口、扩展计算与语义重塑
  • 固安睛睿眼镜深耕视光二十载 全品类配镜一站式门店深度解读 联系电话:183336301983 地址:河北省廊坊市固安县固安镇新昌街凤凰城小区37号楼一单元1601 - 资讯纵览
  • 2026年 上海工程监理服务/工程造价咨询/全过程项目管理公司推荐:专业严谨与高效透明的最新口碑之选 - 品牌发掘

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号