题目

题目描述

小 ZZZ 要进行物理实验,需要 TTT 个电阻,每个电阻所需要的电阻值都可以用一个分数进行表示。
但很不幸的是,物理实验室只有阻值为 111 的电阻和电阻可以忽略不计的导线,好在这些物品有无限多个。
于是小 ZZZ 打算通过串并联的方式尝试构造自己所需要的每个电阻,对于每个电阻,小 ZZZ 都会从一个阻值为 111 的电阻开始,每次在原有的电路基础上串联或者并联一个阻值为 111 的电阻,他想知道对于自己所需要的每个阻值,最少需要使用多少个阻值为 111 的电阻才能拼出来。

输入格式

第一行为一个正整数 TTT,表示数据组数,接下来 TTT 组数据,每组数据一行两个整数 A,BA,BA,B ,表示需要一个阻值为 A/BA/BA/B 的电阻。

输出格式

对每组数据输出一行一个非负整数,表示答案。

样例输入 #1

2
2 3
5 2

样例输出 #1

3
4

【样例解释】

第一组数据中,从一个阻值为 111 的电阻开始,并联一个阻值为 111 的电阻,再串联一个阻值为 111 的电阻即可。
第二组数据中,将两个阻值为 111 的电阻并联,再串联两个阻值为 111 的电阻。

【数据规模与约定】

本题一共 101010 个测试点,每个测试点 101010 分。

第 1∼31\sim 31∼3 个测试点,满足 T,A,B≤20T,A,B≤20T,A,B≤20

所有测试点均满足 1≤T≤1000;1≤A,B≤10181≤T ≤1000 ; 1 ≤ A,B ≤ 10^{18}1≤T≤1000;1≤A,B≤1018

思路

题意大概就是用一些阴值为 111 的电阻,去串联或并联其余阴值为 111 的电阻,求出操作后最终值为 AB\frac{A}{B}BA​ 最少需要几个电阻。
我们设当前的阴值 QP\frac{Q}{P}PQ​,则串联一个阴值为 111 的电阻后,阴值会变为 Q+PP\frac{Q+P}{P}PQ+P​,并联一个阴值为 111 的电阻后,阴值会变为 QP+Q\frac{Q}{P+Q}P+QQ​,可以发现要么操作一次后要么是分母加分子,要么是分子加分母。
而且我们还可以发现一个性质:我们记 f(AB)f(\frac{A}{B})f(BA​) 表示让阴值成为 AB\frac{A}{B}BA​ 所需的电阻数,则 f(AB)=f(BA)(A>B)f(\frac{A}{B})=f(\frac{B}{A})(A>B)f(BA​)=f(AB​)(A>B)。
证明:我们假设 AAA 和 BBB 满足上面的性质,则说明 f(AB)=f(BA)f(\frac{A}{B})=f(\frac{B}{A})f(BA​)=f(AB​),那么 f(A+BA)=f(BA)+1f(\frac{A+B}{A})=f(\frac{B}{A})+1f(AA+B​)=f(AB​)+1,f(AA+B)=f(AB)+1f(\frac{A}{A+B})=f(\frac{A}{B})+1f(A+BA​)=f(BA​)+1,因为 f(AB)=f(BA)f(\frac{A}{B})=f(\frac{B}{A})f(BA​)=f(AB​),所以 f(A+BB)=f(AA+B)f(\frac{A+B}{B})=f(\frac{A}{A+B})f(BA+B​)=f(A+BA​)。而数归的起点是 A=1,B=1A=1,B=1A=1,B=1。
所以我么就可以得出我们的算法:

f(AB)={B=00A≥B⌊AB⌋+f(AmodBB)A<Bf(BA)f(\frac{A}{B})=\begin{cases}B=0~~~~ ~~0\\A≥B~~~ \left \lfloor \frac{A}{B} \right \rfloor+f(\frac{A\bmod B}{B}) \\A<B~~~~ f(\frac{B}{A})\end{cases}f(BA​)=⎩⎨⎧​B=0      0A≥B   ⌊BA​⌋+f(BAmodB​)A<B    f(AB​)​

容易看出这是一个递归,即可实现。

代码

#include<bits/stdc++.h>
using namespace std;
#define R register
#define ri register int
#define int long long
#define ull unsigned long long
#define lid (id<<1)
#define rid (id<<1|1)
void swap(int &x,int &y){int t=x;x=y;y=t;}
inline int max(int x,int y){return x>y?x:y;}
inline int min(int x,int y){return x<y?x:y;}
const int N=2e5;
inline int read();
inline void write(int ans);
inline void put(int x,char c);
int T,a,b;
int get(int n,int m){if(m==0)return 0;if(n<m)return get(m,n);return n/m+get(n%m,m);
}
signed main(){T=read();while(T--){a=read(),b=read();int ss=__gcd(a,b);a/=ss;b/=ss;printf("%lld\n",get(a,b));}return 0;
}
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}return x*f;}
inline void write(int x){if(x<0){putchar('-');x=-x;}if(x>9){write(x/10);}putchar(x % 10+'0');return;}
inline void put(int x,char c){write(x);putchar(c);return;}

【题解】HL模拟赛2022.09.29T1——电阻相关推荐

  1. 省选模拟赛2022/3/23

    省选模拟赛2022/3/23 比赛时间安排 赛后总结反思 与正解的差距 T1 T2 T3 比赛时间安排 7.30-7.40 t1 n<=10,全排列一下跳叶子结点的顺序暴力搞 t2 题意感觉好复 ...

  2. 省选模拟赛2022/3/31

    省选模拟赛2022/3/31 比赛时间安排 赛后反思总结 与正解的差距 T3 比赛时间安排 7.50-8.10 t1 暴力复杂度都很大啊,完全没想法 t2 dfs可以试一试,但是感觉复杂度还是会炸,想 ...

  3. 2022 第十四届蓝桥杯模拟赛第一期(题解与标程)

    第十四届蓝桥杯模拟赛第一期 1. 二进制位数 问题描述 答案提交 参考答案 2. 晨跑 问题描述 答案提交 参考答案 3. 调和级数 问题描述 答案提交 参考答案 程序验证 4. 山谷 问题描述 答案 ...

  4. 第十三届蓝桥杯模拟赛第二期JAVA组个人题解

    第十三届蓝桥杯模拟赛第二期JAVA组个人题解 文章目录 第十三届蓝桥杯模拟赛第二期JAVA组个人题解 题目1 题目2 题目3 题目4 题目5 题目6 题目7 题目8 题目9 题目10 题目1 小蓝的I ...

  5. 第十三届蓝桥杯模拟赛(第三期)试题与题解 C++

    文章目录 第十三届蓝桥杯模拟赛(第三期)试题与题解 1.试题A 题解:数制转换 2.试题B 题解:枚举 3.试题C 题解:枚举 4.试题D 题解:最小生成树 5.试题E 方法一:暴力求和 方法二:一维 ...

  6. 第十四届蓝桥杯第一期模拟赛试题与题解 C++

    第十四届蓝桥杯第一期模拟赛试题与题解 C++ 试题 A 题解:位运算 试题 B 题解:日历模拟 试题 C 题解:double 求和 试题 D 题解:枚举 试题 E 题解:二维前缀和 试题 F 题解:两 ...

  7. 第十四届蓝桥杯校内模拟赛第二期-Java个人题解(仅供参考)

    刚刚结束第十四届蓝桥杯校内模拟赛第二期,在这记录下自己的代码 不保证正确! 不保证正确! 不保证正确! 有问题一起改正!! 题解 2048 代码: package _14届模拟2;public cla ...

  8. 第十四届蓝桥杯(Web 应用开发)模拟赛 3 期-职业院校组题解

    第十四届蓝桥杯(Web 应用开发)模拟赛 3 期-职业院校组题解 友情链接 第十四届蓝桥杯(Web 应用开发)模拟赛 3 期-大学组 第十四届蓝桥杯(Web 应用开发)模拟赛 3 期-职业院校组 第十 ...

  9. 第十三届蓝桥杯模拟赛(第二期)试题与题解 C++

    第十三届蓝桥杯模拟赛(第二期)试题与题解 1.试题A [问题描述] ​ 小蓝的IP地址为 192.168. * .21,其中 * 是一个数字,请问这个数字最大可能是多少 ? 题解 IP地址由四个字节组 ...

最新文章

  1. 详解计算机视觉中的特征点检测:Harris / SIFT / SURF / ORB
  2. 一次实现可以在某些场合替代菱形继承?
  3. 2.9 迁移学习-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  4. freemarker 概述
  5. MySQL分组查询—添加分组前筛选
  6. arduino无源蜂鸣器歌曲编码_Arduino与无源蜂鸣器
  7. python3.x版本的保留字总数是多少_Python3.6.5版本的保留字总数是:()-智慧树大数据分析的python基础章节答案...
  8. 在.NET 6 中如何创建和使用 HTTP 客户端 SDK
  9. Java中的生成器设计模式
  10. RabbitMQ非root用户安装(Linux环境)
  11. 替换jar包_替换代码的情况下不停机!这操作可能工作6年的Java程序员都不会
  12. WinFom解决最小化最大化后重绘窗口造成闪烁的问题
  13. 什么是 JWT Token
  14. 浅谈R语言基于ARCH模型股价波动率建模
  15. 如何设置按组分页同时每页的行数为固定的行数
  16. 哈哈,word 多少页 一千字?
  17. MFC如何在单文档下添加背景图片
  18. mysql 读写分离 360_使用奇虎360的Atlas实现MySQL读写分离
  19. C++题2:“五彩斑斓”
  20. ICN6211:MIPI DSI转RGB视频转换芯片方案介绍

热门文章

  1. C语言入门 —— 非科班大一学生的C语言自学笔记
  2. 操作系统原理_田丽华
  3. 计算机网络王长征答案,华东交大实验指导(新版-王长征)--cisco版本-打印2.doc
  4. 赵小楼《天道》《遥远的救世主》深度解析(48)为什么韩楚风说丁元英是“元英害怕女人是怕到骨子里了”?
  5. 使用CMD满速下载百度云
  6. Tomcat修改访问域名
  7. sweetalert2中ajax用法,SweetAlert2例子
  8. 一站式移动办公SaaS将成为未来企业管理平台的最佳选择
  9. 用C语言编写数字时钟
  10. js使用icon-font,代替图片图标