【题解】HL模拟赛2022.09.29T1——电阻
题目
题目描述
小 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——电阻相关推荐
- 省选模拟赛2022/3/23
省选模拟赛2022/3/23 比赛时间安排 赛后总结反思 与正解的差距 T1 T2 T3 比赛时间安排 7.30-7.40 t1 n<=10,全排列一下跳叶子结点的顺序暴力搞 t2 题意感觉好复 ...
- 省选模拟赛2022/3/31
省选模拟赛2022/3/31 比赛时间安排 赛后反思总结 与正解的差距 T3 比赛时间安排 7.50-8.10 t1 暴力复杂度都很大啊,完全没想法 t2 dfs可以试一试,但是感觉复杂度还是会炸,想 ...
- 2022 第十四届蓝桥杯模拟赛第一期(题解与标程)
第十四届蓝桥杯模拟赛第一期 1. 二进制位数 问题描述 答案提交 参考答案 2. 晨跑 问题描述 答案提交 参考答案 3. 调和级数 问题描述 答案提交 参考答案 程序验证 4. 山谷 问题描述 答案 ...
- 第十三届蓝桥杯模拟赛第二期JAVA组个人题解
第十三届蓝桥杯模拟赛第二期JAVA组个人题解 文章目录 第十三届蓝桥杯模拟赛第二期JAVA组个人题解 题目1 题目2 题目3 题目4 题目5 题目6 题目7 题目8 题目9 题目10 题目1 小蓝的I ...
- 第十三届蓝桥杯模拟赛(第三期)试题与题解 C++
文章目录 第十三届蓝桥杯模拟赛(第三期)试题与题解 1.试题A 题解:数制转换 2.试题B 题解:枚举 3.试题C 题解:枚举 4.试题D 题解:最小生成树 5.试题E 方法一:暴力求和 方法二:一维 ...
- 第十四届蓝桥杯第一期模拟赛试题与题解 C++
第十四届蓝桥杯第一期模拟赛试题与题解 C++ 试题 A 题解:位运算 试题 B 题解:日历模拟 试题 C 题解:double 求和 试题 D 题解:枚举 试题 E 题解:二维前缀和 试题 F 题解:两 ...
- 第十四届蓝桥杯校内模拟赛第二期-Java个人题解(仅供参考)
刚刚结束第十四届蓝桥杯校内模拟赛第二期,在这记录下自己的代码 不保证正确! 不保证正确! 不保证正确! 有问题一起改正!! 题解 2048 代码: package _14届模拟2;public cla ...
- 第十四届蓝桥杯(Web 应用开发)模拟赛 3 期-职业院校组题解
第十四届蓝桥杯(Web 应用开发)模拟赛 3 期-职业院校组题解 友情链接 第十四届蓝桥杯(Web 应用开发)模拟赛 3 期-大学组 第十四届蓝桥杯(Web 应用开发)模拟赛 3 期-职业院校组 第十 ...
- 第十三届蓝桥杯模拟赛(第二期)试题与题解 C++
第十三届蓝桥杯模拟赛(第二期)试题与题解 1.试题A [问题描述] 小蓝的IP地址为 192.168. * .21,其中 * 是一个数字,请问这个数字最大可能是多少 ? 题解 IP地址由四个字节组 ...
最新文章
- 详解计算机视觉中的特征点检测:Harris / SIFT / SURF / ORB
- 一次实现可以在某些场合替代菱形继承?
- 2.9 迁移学习-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
- freemarker 概述
- MySQL分组查询—添加分组前筛选
- arduino无源蜂鸣器歌曲编码_Arduino与无源蜂鸣器
- python3.x版本的保留字总数是多少_Python3.6.5版本的保留字总数是:()-智慧树大数据分析的python基础章节答案...
- 在.NET 6 中如何创建和使用 HTTP 客户端 SDK
- Java中的生成器设计模式
- RabbitMQ非root用户安装(Linux环境)
- 替换jar包_替换代码的情况下不停机!这操作可能工作6年的Java程序员都不会
- WinFom解决最小化最大化后重绘窗口造成闪烁的问题
- 什么是 JWT Token
- 浅谈R语言基于ARCH模型股价波动率建模
- 如何设置按组分页同时每页的行数为固定的行数
- 哈哈,word 多少页 一千字?
- MFC如何在单文档下添加背景图片
- mysql 读写分离 360_使用奇虎360的Atlas实现MySQL读写分离
- C++题2:“五彩斑斓”
- ICN6211:MIPI DSI转RGB视频转换芯片方案介绍
热门文章
- C语言入门 —— 非科班大一学生的C语言自学笔记
- 操作系统原理_田丽华
- 计算机网络王长征答案,华东交大实验指导(新版-王长征)--cisco版本-打印2.doc
- 赵小楼《天道》《遥远的救世主》深度解析(48)为什么韩楚风说丁元英是“元英害怕女人是怕到骨子里了”?
- 使用CMD满速下载百度云
- Tomcat修改访问域名
- sweetalert2中ajax用法,SweetAlert2例子
- 一站式移动办公SaaS将成为未来企业管理平台的最佳选择
- 用C语言编写数字时钟
- js使用icon-font,代替图片图标