当前位置: 首页 > news >正文

Luogu P2090 [CF134B] 数字对

Luogu 题目传送门
双倍经验 (原题)

洛谷打完卡(运势 § 大吉 § ) 后,随机题目跳转到了这一题

\(\;\)

题目大意

没什么好说的,我就直接 Copy + Paste
让我们假设有一对数 (a, b) 。我们可以从前一步得到后一对数 (a + b, b) 或者 (a, a + b)。

让我们规定一开始这对数为 (1,1) 。你的任务就是找到数k,使k为从 (1,1) 转换到一对至少含有一个 \(n\) 的数对的最少步骤。

输入样例:

5

输出为:

3

\(\;\)

算法!

我们要试图从 (1,1) 转换到 (n,k), \(k\) 是任意数字,\(n\) 是我们需要的数字。发现我们可以用 bfs 暴力搜索,每一次转换到 (a, a+b) 和 (a+b, a)。代码如下:

#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,ans=0x7FFFFFFFFFFFFFFF;void bfs(int a,int b,int steps) {if (a>nor  b>n) return void();if (a==n||b==n) return ans=min(ans,steps),void();=bfs(a,a+b,num,steps+1);bfs(a+b,a,num,steps+1);
}signed main() {cin>>n;bfs(1,1,0);cout<<ans;return 0;
}

时间复杂度:O(N^2)

结果 TLE 了,值得了 60 分。
\(\;\)

我们换一个思路,发现我们最终要到 n, k。反过来也会一样,从 n, k 一直转换到 1, 1。我们取 \(k\)\(1 \sim n-1\),代码如下

#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,ans=0x7FFFFFFFFFFFFFFF;
void bfs(int a,int b,int steps) {if (a<=0 or b<=0) return void();if (a==1 and b==1) return ans=min(ans,steps),void();if (b>a) bfs(b-a,a,steps+1);else bfs(a-b,b,steps+1);
}signed main() {cin>>n;for (int i=1;i<n;i++) dfs(i,n,0);cout<<ans;return 0;
}

\(\;\)

时间复杂度:O(N log N)

空间复杂度:O(log N)

现在已经 AC了,但是我们可以更快。
发现当我们知道了尾端 (n, k), 只有一条或没有路到 (1, 1)。所以我们可以更改 bfs 的算法成模拟算法:

while (a!=1 || b!=1) {if (a<=0 || b<=0) return -1;if (b>a) b=b-a;else a=a-b;
}
return steps;

再仔细检查,我们可以二次加速 --> 当算的时候 steps 已经超过了 ans,我们就直接返回,不搜了。由此我们可以得到史上最短,最快的代码:

时间复杂度:O(N log N)

空间复杂度:O(1)

完整代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,ans=0x7FFFFFFFFFFFFFFF,tmp;
int bfs(int a,int b,int steps) {while (a!=1 || b!=1) {if (a<=0 || b<=0) return -1;if (b>a) b=b-a;else a=a-b;if (++steps>=ans) return steps+1;}return steps;
}
signed main() {cin>>n;if (n==1) {write(0);return 0;}for (int i=n;i>=1;i--) {tmp=bfs(i,n,0);if (tmp==-1) continue;ans=min(ans,tmp);}cout<<ans;return 0;
}

\(\;\)

进食后人

  1. Hack 数据: 输入: 1,输出: 0
http://www.gsyq.cn/news/71202.html

相关文章:

  • CF228E-The Road to Berland is Paved With Good Intentions
  • 2025年中国五大内磁喇叭厂家推荐:看哪家品质可靠
  • PbootCMS如何实现上传的文件使用原名称(PbootCMS 二开实现非图片文件使用原名称保存的方法)
  • 2025年惠州口碑好的民办高级中学排行榜,求推荐实力不错的民
  • 2025年度北京冲锋衣棉服合作商排行榜:冲锋衣棉服加工厂哪家
  • 2025全国矿用橡套电缆公司排名 煤矿极端环境适用
  • 2025温州奢侈品名包回收TOP5权威推荐:诚信名包回收门店
  • 羽绒被买什么牌子好?从原料到工艺,深度解析 5 大优质品牌的核心优势
  • 想选一床安心羽绒被?看遍行业后,我锁定了这个专注高端制造的 “隐形冠军”
  • 2025年语言培训学校排行:日语语言培训机构前十强与行业全解
  • 2025年12月儿童助听器验配机构对比评测榜:专业服务与科学验配指南
  • 【Azure Policy】实现拒绝新建/可以修改已存在资源的 Azure Policy 方案
  • 2025年12月真空袋厂家推荐榜单:五大知名厂商综合对比与选择指南
  • 2025进口地板十大品牌综合实力排行榜 - 智能、环保与品质的巅峰对决
  • 2025年12月真空袋厂家综合推荐榜:行业趋势与实操选择要点
  • GODIAG GT327 SUPER DOIP ENET OBDII Scanner - BT4 Voltage Display for iOS/Android/Windows
  • 2025年工业冷风机在制造业应用实现重大突破,铁皮房车间厂房降温/装配车间通风降温/大型钢结构车间降温工业冷风机生产厂家哪家好
  • 2025年市场认证机构推荐:哪家权威性更高?全方位评测与用户口碑分析
  • 2025年12月背单词软件评测排名:从功能到口碑的深度解析
  • 2025停经架品牌制造商TOP5权威推荐:甄选的停经架厂家,
  • 2025宁波奢侈品回收TOP5推荐:看哪家奢侈品回收门店可靠
  • 狂揽 19000+ Star 的国产开源项目
  • 掌握比特币:开放区块链编程全解析
  • GEO优化源头厂家口碑排行,GEO优化AI搜索/广告全案策划、制作、发布/短视频矩阵/GEO优化AI工具排名GEO优化品牌口碑推荐榜
  • pbootcms站点信息调用(PbootCMS站点信息调用标签详解与使用指南)
  • pbootcms模板tag标签调用(PbootCMS Tag标签调用全攻略:从基础到进阶)
  • 2025年减震隔音板,隔音板批发,隔音板安装厂家最新推荐:企业减震工艺与售后安装保障解读
  • Nuxt.js v4中使用quill富文本组件
  • pbootcms模板导航调用方法(PbootCMS模板导航调用方法指南)
  • webpack配置不当导致接口信息泄露-实战复盘