做化工资讯的网站搜索seo优化
题目传送门:
[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;
}