Codeforces Round #200 (Div. 1)

A. Rational Resistance

题意是给你很多1欧姆的电阻,经过很多次的串并联之后最少需要多少电阻可以构造出 a / b

这大概是一个数论题?反正标签是这样说的
虽然对于数论我不是很会
但这个题很有意思就尝试了一下
电阻的串并联大家肯定都很明白
首先像三分之一这样的电阻肯定是三个电阻串联得到的
所以几分之一就需要几个电阻并联
其他情况的话…
举个例子
在这里插入图片描述
比值是3 / 2 我们可以想到拆成 1 / 2 + 1,这样就相当于是一个1 / 2 的电阻串联一个电阻,一个1 / 2 的电阻又可以是两个电阻并联
既然 a > b 的时候可以这样想,那 a < b 怎么办
这时候就不能拆成一个数加另一个数了

反过来想 a > b 可以拆成串联的状态,那 a > b 就拆成并联的状态好了
这样一想 2 / 3 就可以从 1 / (3 / 2) 得到,那就可以把分母拆成 1 / 2 + 1
所以对于一个比值,不论是 a > b 还是 a < b 拆成的样子是一样的,只是串并联的不同

那就每次将大的数比小的数大的部分加到答案中,然后继续将剩余的部分再进行这样的操作就好了吖

我同学告诉我这是gcd,非数论选手打扰了

ll ans;
void dfs(ll n,ll m){
	if(n == 0 || m == 0) return;
	if(n >= m){
		ans += n / m;
		dfs(n%m,m);
	}else{
		ans += m / n;
		dfs(n,m%n);
	}
}
 
int main(){
	ll a , b;
	cin >> a >> b;
	dfs(a , b);
	cout << ans;
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你数过天上的星星吗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值