本文主要是介绍luogu-P10570 [JRKSJ R8] 网球,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目传送门:
[JRKSJ R8] 网球 - 洛谷https://www.luogu.com.cn/problem/P10570
解题思路
数学问题,暴力这个范围会超时。
首先,找出这两个数的最大公因数,将这两个数分别除以最大公因数,则这两个数互质,判断如果有一方<=c,求出他们翻倍的倍数(ceil(c*1.0/min(a,b))),那么将他们分别乘ceil(c*1.0/min(a,b))(这里如果用循环会超时),即可求出a+b最小值,这里主要考察两个数除最大公因数为互质,即结果会最小。
代码
#include<bits/stdc++.h>
using namespace std;
long long gcd(long long a,long long b)
{return b?gcd(b,a%b):a;
}
int main()
{long long t,a,b,c,r,x,y;for(cin>>t; t; t--){scanf("%lld%lld%lld",&a,&b,&c);r=gcd(a,b); //求出最大公因数,使他们互质 a/=r;b/=r;x=a;y=b;if(x < c || y < c){long long d = ceil(c*1.0/min(a,b)); //求出翻倍的倍数 x = d*a;y = d*b;}cout<<x+y<<endl; //输出 }return 0;
}
这篇关于luogu-P10570 [JRKSJ R8] 网球的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!