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

【题解】CCPC 2024 Jinan Site [F] The Hermit

【题解】CCPC 2024 Jinan Site [F] The Hermit
📅 发布时间:2026/6/19 22:25:42

题目链接

CCPC 2024 Jinan Site [F] The Hermit

题目大意

给定一个 \({1, 2, 3 ... m}\) 的集合 \(U\) ,要求从中抽取 \(n\) 个数组成子集 \(S\) ,对于每个 \(S \subset U\),定义 \(gcd(S) \neq min(S)\) 为合法,现在从 \(S\) 中删去若干个数,在保证合法的同时使得 \(||S||\) 最大,记这个最大的集合为 \(T\) ,然后,对 \(||T||\) 求和。

思路

求解思路

暴力枚举全部子集并且求解的复杂度不低于 \(O(C_m^n)\),绝对过不了,答案应当和具体的枚举无关,是一个状态转移的计数问题。朴素的,当 \(S\) 确定时,每次删除 \(min(S)\) ,可以保证得到最大的\(||S||\) , 当 \(m\) 和 \(n\) 很大时,非常难求解,以至于对于第二组样例11 4,答案都达到了几千的量级,无法手动模拟。但是我们可以发现,任一问题的答案,都由 \(m\) 和 \(n\) 完全确定,如果我们有办法把一个很难求解的“大”问题转换为若干个容易求解的子问题就好了,基于这个思路,我想到了记忆化搜索。

和DP一样,记忆化搜索的核心也在于状态的定义与转化,本题已经用 \(m\) 和 \(n\) 给我们构建好了状态,我们记 \(m\) \(n\) 时的答案为 \(a_{m,n}\) ,我们希望 \(a_{m,n}\) 能够由若干个 \(a_{m',n'}\) 转化而来,其中 \(m' \leq m , n' \leq n\),不同时取等,当我们要求解 \(a_{m,n}\) 我们可以入手讨论:

  1. \(gcd(S) = k , k \notin S\) ,这种情况,显然合法,记合法情况的数量为 \(cnt\),对答案的贡献为 \(cnt \times n\)。其中,\(cnt\) 正向求难求,正难则反,先求出所有 \(k \notin S\) 的子集数量 \(C_{m-1}^n\),再减去\(gcd(S) \neq k\) 的情况,后者可以通过构造方法求解,即枚举 \(gcd(S)\) ,剩余的数都是 \(gcd(S)\) 的 \(k\) 倍。

\[cnt = C_{m-1}^n - \Sigma_{i=2}^m C_{\frac{m}{i}-1}^{n-1} \]

特别的,求和项中组合数待选取的数的数量为 \(\frac{m}{i}-1\) 需要的数的数量为 \(n-1\),因为你必须要选中 \(gcd(S)\) ,试考虑 4 6 8 10 这一组数据,它不应因\(gcd(S) = 2\) 被删去。

  1. \(gcd(S') = 1, S = S' \cup \{1\}\) ,这种情况,不合法,但是可以通过简单删去1使之合法,对答案的贡献为 \(cnt \times (n-1)\),其余与上述同理,记得必须额外选中\(1\)即可。

\[cnt = C_{m-1}^{n-1} - \Sigma_{i=2}^m C_{\frac{m}{i}-1}^{n-2} \]

  1. \(gcd(S) = k, k \in S\), 这种情况,通过整个集合除以 \(k\) 转化为第二种情况,具体地,此处我们可以考虑两个集合。

\[A = \{a_1, a_2, a_3 ... a_n\} \]

\[B = \{ka_1, ka_2, ka_3, ka_n\} \]

如果我们新定义集合的数乘,你会发现\(B = kA\),其中\(A\)一定满足以上1、2两种情况之一,其中\(1 \leq ka_i \leq m\) ,即 \(\lfloor \frac{1}{k} \rfloor \leq a_i \leq \lfloor \frac{m}{k} \rfloor\),\(B\) 的贡献实际上就是子问题 \(a_{\frac{m}{k},n-1}\) 的答案,其中, \(n-1\) 是因为 \(a_1 = 1\)。

优化思路

预处理阶乘、逆元、逆元的阶乘。

朴素的递归求解,最多不超过 \(log m\) 层,每层枚举 \(k \in [1,m]\),时间复杂度上界大约在 \(O(m^{log m})\) 量级,进入下一层时 \(m\) 按倍数缩小,远低于上界,但是仍太慢,可以朴素记忆化搜索优化。

此外,可以数论分块,时间复杂度上界降至\(O({\sqrt{m}}^{log m})\)

代码

#include <iostream>
#include <unordered_map>
using namespace std;
const int N = 100005;
const int MODER = 998244353;
long long fact[N];
long long inv[N];
long long finv[N];long long C(long long a, long long b) {if(b>a) {return 0;}if(b==0) {return 1;}return fact[a]*finv[a-b]%MODER*finv[b]%MODER;
}long long cat(int A, int B) {long long ans = 0;ans ^= A;ans <<= 32;ans ^= B;return ans;
}unordered_map<long long , long long> mem;long long dfs(int m, int n) {if(mem.count(cat(m, n))) {return mem[cat(m, n)];} else if(n <= 1 || m<n) {return 0;} else {long long ans = n*C(m-1, n) + (n-1)*C(m-1, n-1);for(int l=2,r;l<=m;l=r+1) {r = m/(m/l);ans -= (r-l+1)*C(m/l-1, n-1)*n;ans -= (r-l+1)*C(m/l-1, n-2)*(n-1);ans = (ans%MODER+MODER)%MODER;}for(int l = 2, r;l<=m;l=r+1) {r = m/(m/l);ans += dfs(m/l, n-1)*(r-l+1);}ans %= MODER;mem[cat(m, n)] = ans;return ans;}
}int main() {int n,m;cin>>m>>n;fact[0] = fact[1] = 1;finv[0] = finv[1] = 1;inv[0] = inv[1] = 1;for(int i=2;i<=m;i++) {fact[i] = fact[i-1]*i%MODER;inv[i] = 1ll*(MODER - MODER/i)*inv[MODER%i]%MODER;finv[i] = finv[i-1]*inv[i]%MODER;}long long ans = dfs(m, n);cout<<ans<<endl;
}

相关新闻

  • 2025 年 11 月精密无缝钢管,镀锌无缝钢管,定制无缝钢管厂家最新推荐,产能、专利、环保三维数据透视!
  • 2025 年 11 月合金无缝钢管,大口径无缝钢管,厚壁无缝钢管厂家最新推荐,技术实力与市场口碑深度解析!
  • 题解:AT_abc131_e [ABC131E] Friendships

最新新闻

  • ComfyUI TTP Toolset:3步掌握8K超分辨率图像分块处理技术,普通电脑也能轻松实现AI图像增强
  • LPC3130/3131 ARM9微控制器:多层AHB总线与引脚复用的嵌入式设计精要
  • 2026衡水2026正规漏水检测维修公司精选口碑榜TOP5权威推荐-精准定位检测漏水点-专业防水补漏堵漏维修、卫生间/厨房/屋顶/天沟/地下室/阳台防水漏水检测维修 - 安佳防水
  • 3种智能编排策略重构AI工作流创作效率
  • PPO算法在大语言模型RLHF训练中的工程实践与调参指南
  • 武汉南华光电职业技术学校2026年最新招生简章 - 武汉中职最新信息发布

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 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 号