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

题目链接

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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/953757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubunt 搭建Samba服务

用户及目录结构管理 创建用户 sudo groupadd fileusers创建个人目录和用户 sudo mkdir -p /data/dataShare sudo useradd -d /data/dataShare/xiaoming -g fileusers -s /usr/sbin/nologin xiaoming规划创建目录结构 s…

2025 年 11 月精密无缝钢管,镀锌无缝钢管,定制无缝钢管厂家最新推荐,产能、专利、环保三维数据透视!

近期,行业权威协会针对精密无缝钢管、镀锌无缝钢管、定制无缝钢管领域开展 2025 年 11 月专项测评,测评覆盖近百家主流厂家,以 “产能规模、专利技术、环保标准” 为三维核心指标,结合产品质量、售后服务进行综合评…

2025 年 11 月合金无缝钢管,大口径无缝钢管,厚壁无缝钢管厂家最新推荐,技术实力与市场口碑深度解析!

近期,行业权威协会针对合金无缝钢管、大口径无缝钢管、厚壁无缝钢管领域开展 2025 年 11 月专项测评,测评覆盖近百家主流厂家,以 “技术实力、市场口碑” 为核心维度,结合产品质量、售后服务进行综合评估。技术实力…

题解:AT_abc131_e [ABC131E] Friendships

前言 这是本人第一篇题解。 题意 构造一个简单图(没有重边与自环)。图中总共有 $N$ 个节点,分别为 $1$ 到 $N$。总共有 $M$ 条边,每一条边的长度均为 $1$。有且仅有 $K$ 对节点 $(u,v)$ 满足 $u$ 到 $v$ 的最短距离…

C 运算符、表达式、语句

本文记录一下,在C语言中的基本概念;在很多书籍中运算符、表达式、语句会被分为多个章节,细致地介绍;但本人记录这个系列主要是为了拾遗,所以就将觉得有必要提及的知识点记录下来。 运算符大概分为算术运算、逻辑运…

题解:AT_abc036_d [ABC036D] 塗り絵

题意 有一棵由 $N$ 个点 $N-1$ 条边构成的树,求出树上每个点染成白色或黑色,但相邻两个点不能同时染成黑色的染色方案数量,并取模 $10^9+7$。 思路 对于这种求合法方案数的题目,一般可以考虑 $dp$ 。设 $dp_{i,1}$…

2025 年 11 月高压锅炉无缝钢管,方形无缝钢管,16Mn 无缝钢管厂家最新推荐,聚焦资质、案例、售后的五家机构深度解读!

近期,由十家行业专业机构联合开展 2025 年 11 月高压锅炉无缝钢管、方形无缝钢管、16Mn 无缝钢管专项测评,测评覆盖近百家主流厂家,以 “资质合规性、项目案例真实性、售后服务完善度” 为核心,结合技术实力、产品…

[论文笔记] Machine-Learning-Guided Selectively Unsound Static Analysis

Introduction 现有的静态分析工具都是 unsound 的,并且体现为 uniformly unsound。这里的“uniformly”指静态分析工具会用一种统一地忽略所有不能处理的特性,而不考虑代码上下文。这种策略会减少误报率 \(\frac{fal…

2025 年 11 月精密无缝钢管,合金无缝钢管,厚壁无缝钢管厂家最新推荐,实力品牌深度解析采购无忧之选!

近期,行业权威协会针对精密无缝钢管、合金无缝钢管、厚壁无缝钢管领域开展了 2025 年度 11 月专项测评,测评覆盖近百家主流厂家,从技术实力、产品质量、生产能力、售后服务、市场口碑五大维度,采用数据化评分与实地…

题解:AT_abc166_f [ABC166F] Three Variables Game

题目 思路 这是一道比较简单的贪心题。 不断地分类讨论。哪一个小就加一,另一个就减一。如果两个都相等时,就判断下一个,有相同的就加一,另一个减一,如果都没有相同的,就随便加减。如果两个都为 $0$ 时,就直接输出…

Awesome Neovim - 精选Neovim插件大全

Awesome Neovim是一个精心策划的Neovim插件集合,专注于展示Neovim特有功能的插件。项目包含插件管理器、LSP支持、自动补全、语法高亮等各类高质量插件,帮助用户打造高效开发环境。Awesome Neovim精选的Neovim插件集…

不会AI编程?没关系!这几个框架也让你也能开发AI聊天助手!

这篇教程教你从零开始,使用FastAPI+Vue构建类似Deepseek的AI助手。内容涵盖完整的前后端架构设计、数据库规划、LLM集成、安全防护与性能优化等。即使编程经验不多,也能跟着步骤实现打字机效果等流畅交互功能,打造一…

[KaibaMath]1018 基于复合函数理解子数列的一般项

[KaibaMath]1018 基于复合函数理解子数列的一般项子数列一般项的下标形如阶梯,我们不妨称其为数列下标的阶梯表示法。但这种表示法给出的一般项委实不容易理解,故本文基于复合函数给出一种更容易的理解方式。基于此,…

窗口函数

窗口函数:它们都用于为查询结果集中的每一行分配一个排名或序号 核心区别总结表函数功能描述排序特点(针对相同值)序号示例ROW_NUMBER() 为每一行生成一个唯一的、连续的序号。 即使值相同,也会分配不同序号(顺序…

别只怪客户端宕机!还有这些导致 Redis 分布式锁“死锁”的原因 - 公众号

本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续!🚀 魔都架构师 | 全网30W技术追随者🔧 大厂分布式系统/数据中台实战专家🏆 主导交易系统百万级流量调优 & 车联网平台架构🧠 AIGC应用开发…

CCF CSP-S2 2025 游记

\(\text{Day0}\) 看到了 2024 年的第三题,我一直在复习组合计数 DP。结果,一天就弄懂了两道题。。。 \(\text{Day1}\) 第一件事自然是洛谷签到,中吉,忌出行、摸鱼。 早上八点出发,一早起来大雾,告诉走不了高速,…

CSP-S 2025 总结

114,514,1919810.0.前言 信心十足! 1.正文 不会做原题。 2.总结 我是人类吗?

LangChain v1.0 中间件详解:彻底搞定 AI Agent 上下文控制

用 LangChain 构建 AI Agent 的人应该都遇到过这种情况:测试阶段一切正常,部署到生产环境就开始出各种问题。上下文管理混乱,Agent 的行为变得难以预测,最后不得不写一堆自定义代码来控制信息流向。 这是因为在v1.…

【EF Core】“多对多”关系与跳跃导航

“多对多”关系不像“一对多”那么“单纯”,它内部涉及到“连接实体”(Join Entity)的概念。咱们先放下这个概念不表,来了解一下多对多数据表为什么需要一个“辅助表”来建立关系。 假设有两张表:一张表示学生,一…

DeepSeek-MTP多token预测

多Token预测(Multi-Token Prediction, MTP)是DeepSeek-V3模型的一项核心创新技术,旨在通过一次前向传播预测多个未来词元,从而显著提升模型的训练效率和推理速度,同时增强对上下文的理解能力。该技术原始论文是由…