当前位置: 首页 > 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.jsqmd.com/news/60663/

相关文章:

  • CF228E-The Road to Berland is Paved With Good Intentions
  • 吱吱即时通讯软件打造数据安全堡垒,保障企业通讯数据安全
  • Parse error: syntax error, unexpected :, expecting {
  • (6)普中A2 51单片机矩阵键盘和密码锁 - 详解
  • P5186 [COCI 2009_2010 #4] OGRADA
  • 2025年反应釜定制厂家实力推荐,看看哪家信誉好?
  • HTML5与CSS3 API文档及强大的技术书籍资源包
  • 2025年中国五大内磁喇叭厂家推荐:看哪家品质可靠
  • 2025年度口碑好的金相检测分析服务商TOP5权威推荐:看看
  • PbootCMS模板如何调用友情链接(PbootCMS友情链接调用指南:标签与参数详解)
  • 2025温汤镇温泉房产TOP5权威推荐:深度测评指南,甄选度
  • 2025年中国五大内磁喇叭工厂推荐:哪家口碑好?
  • 12月最新推荐!宠物饮水机方案商权威排行榜:聚焦智能健康养宠,IoT平台与专业品牌深度解析
  • 2025年上海注册公司费用及收费标准TOP5推荐:注册公司流
  • PbootCMS模板怎么嵌套引用其他模版文件(PbootCMS 模板嵌套引用其他模板文件的方法)
  • PbootCMS如何实现上传的文件使用原名称(PbootCMS 二开实现非图片文件使用原名称保存的方法)
  • 神州数码AP密码
  • 2025年五大乳化泵服务厂商推荐排行榜,实力乳化泵供应商选择
  • PbootCMS多选按钮前台页面如何循环|内容多选遍历(PbootCMS 多选按钮前台页面循环遍历方法)
  • 2025年五大靠谱的隔离式安全栅推荐,专业实力品牌全解析
  • 2025年惠州十大奢侈品名包回收店排行榜,推荐回收价高的奢侈
  • PBOOTCMS调用时间标签[list:data],怎么调用不显示小时、分、秒
  • 2025年惠州口碑好的民办高级中学排行榜,求推荐实力不错的民
  • 2025年度中国3PE防腐无缝钢管公司排名:诚信的酸洗钝化无
  • 2025年度冲锋衣棉服加工厂排名:冲锋衣棉服加工厂哪家售后
  • Experimental results of RSDK method
  • 2025年专业的工业噪声治理公司TOP5权威推荐:甄选企业助
  • 2025年度铁艺冲压配件十大优质生产厂排行榜,合作案例多的企
  • 2025年度北京冲锋衣棉服合作商排行榜:冲锋衣棉服加工厂哪家
  • 2025全国矿用橡套电缆公司排名 煤矿极端环境适用