news 2026/6/19 5:53:10

C. Omsk Programmers 题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C. Omsk Programmers 题解

C. Omsk Programmers 题解

思路

操作有两种:

  1. ab1
  2. ab变成floor(value / x)

关键结论:对任意一个数,如果一段操作里一共做了k次除法和若干次+1,那么这些+1都可以放到所有除法之后做,答案不会变差。

原因是:一次+1如果放在后续除法之前,它对最终结果的贡献最多也只是让最终值增加1;把它放到最后,同样花费一次操作,至少不会更差。

所以,对于一个初始值n,我们只需要考虑:

n, floor(n / x), floor(n / x^2), ...

如果做了i次除法,当前值是A_i = floor(a / x^i)
如果做了j次除法,当前值是B_j = floor(b / x^j)

之后只需要把较小的那个数加到较大的那个数,总代价为:

i + j + abs(A_i - B_j)

因此枚举ab重复除以x后能得到的所有值,取上式最小值即可。

因为a, b <= 10^9,且x >= 2,每个数最多只会产生约30个不同层级,所以直接双重枚举即可。

正确性证明

引理 1

固定一个初始值n,如果某个操作序列中有k次除法和m次加一操作,并且最终得到y,那么存在另一个操作序列:先做k次除法,再做若干次加一操作,花费不超过原序列,并且也能得到y

证明:

先只看这k次除法,不做任何加一操作,最终值为floor(n / x^k)

原序列中的每次加一操作,即使放在除法之前,它对最终值的提升也最多为1。所以如果原序列最终得到y,必然有:

y >= floor(n / x^k) y - floor(n / x^k) <= m

于是我们可以先做k次除法,再做y - floor(n / x^k)次加一操作,花费不超过k + m

引理成立。

引理 2

ai次除法得到A_ibj次除法得到B_j,那么在这两个除法次数固定时,最小额外加一次数是abs(A_i - B_j)

证明:

除法结束后,两个数分别是A_iB_j。之后只能加一,所以最终公共值不能小于二者最大值。取公共值为max(A_i, B_j)时,较小者加到较大者,花费正好是:

max(A_i, B_j) - min(A_i, B_j) = abs(A_i - B_j)

这是最小的。

定理

答案等于:

min(i + j + abs(A_i - B_j))

其中A_i = floor(a / x^i)B_j = floor(b / x^j)

证明:

由引理 1,存在最优方案,使得每个数都是先做若干次除法,再做若干次加一操作。

设最优方案中a做了i次除法,b做了j次除法。由引理 2,在这组i, j固定时,最优代价就是:

i + j + abs(A_i - B_j)

枚举所有可能的i, j并取最小值,就一定能得到全局最优答案。

复杂度

每个数最多被除到0,层数为O(log_x n)

单个测试用例复杂度:

O(log_x a * log_x b)

在本题范围内最多约31 * 31次枚举。

C++17 代码

#include<bits/stdc++.h>usingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intt;cin>>t;while(t--){longlonga,b,x;cin>>a>>b>>x;vector<pair<longlong,longlong>>va,vb;longlongcur=a;for(longlongcnt=0;;cnt++){va.push_back({cur,cnt});if(cur==0)break;cur/=x;}cur=b;for(longlongcnt=0;;cnt++){vb.push_back({cur,cnt});if(cur==0)break;cur/=x;}longlongans=llabs(a-b);for(auto[av,ai]:va){for(auto[bv,bi]:vb){ans=min(ans,ai+bi+llabs(av-bv));}}cout<<ans<<'\n';}return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/19 5:37:49

用分布特征预估分类器性能上限:Bhattacharyya距离与Fisher判别比实战

1. 这不是“看图猜性能”&#xff0c;而是用分布特征反推模型上限的硬核直觉你有没有过这种经历&#xff1a;拿到一份新数据&#xff0c;还没建模&#xff0c;光是画几个直方图、散点图、类别分布叠加图&#xff0c;心里就大概有数——这个任务怕是很难做到95%准确率&#xff1…

作者头像 李华
网站建设 2026/6/19 5:19:40

多模态AI投资代理:财报电话会议的跨模态分析实战

1. 项目概述&#xff1a;为什么一个能“听懂”财报电话会议的AI代理&#xff0c;正在改写投资研究的基本功你有没有试过在凌晨三点盯着一份长达87页的财报电话会议文字稿&#xff0c;一边划重点一边怀疑自己是不是在读《天书》&#xff1f;我做过三年卖方分析师&#xff0c;最常…

作者头像 李华
网站建设 2026/6/19 5:05:07

Claude上下文优化三法则:Skills懒加载、Explore子代理与路径规则

1. 为什么“省 token”不是抠门&#xff0c;而是专业基本功&#xff1f;你有没有过这种体验&#xff1a;刚打开 Claude Code&#xff0c;还没开始写代码&#xff0c;对话框右上角的 token 计数器已经跳到了 7200&#xff1f;点开历史记录一看&#xff0c;系统自动加载了一堆你根…

作者头像 李华
网站建设 2026/6/19 4:49:53

豆包智能感从何而来:五层能力涌现机制解析

1. 项目概述&#xff1a;当“豆包”开始让人下意识发问“是不是出现智能了&#xff01;&#xff1f;”“豆包是不是出现智能了&#xff01;&#xff1f;”——这句话不是一句调侃&#xff0c;也不是社交平台上的流量梗&#xff0c;而是一个真实发生在我们日常交互场景中的认知震…

作者头像 李华
网站建设 2026/6/19 4:34:12

基于 Python 实现及优化链接分析–PageRank 算法分析

♻️ 资源 大小&#xff1a; 1.12MB ➡️ 资源下载&#xff1a;https://download.csdn.net/download/s1t16/87450280 链接分析–PageRank 算法分析实现及优化 一、摘要 互联网时代带给人们生活最大的改变是&#xff0c;通过搜索引擎进行高效准确的 Web 搜索。尽管 Google 并…

作者头像 李华