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最小值,这里主要考察两个数除最大公因数为互质,即结果会最小。

代码

cpp 复制代码
#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;
}
相关推荐
qq_404265831 分钟前
C++中的代理模式实战
开发语言·c++·算法
玛卡巴卡ldf3 分钟前
【LeetCode 手撕算法】(滑动窗口) 3-无重复字符的最长子串、438-找到字符串中所有字母异位词
数据结构·算法·leetcode·哈希算法
liuyao_xianhui4 分钟前
动态规划_最大子数组和_C++
java·开发语言·数据结构·c++·算法·链表·动态规划
liulilittle6 分钟前
C++实现广播地址计算
开发语言·c++
追烽少年x6 分钟前
VC++中使用GDI+自定义绘制信号灯
c++
载数而行5209 小时前
QT的五类布局
c++·qt·学习
故事和你919 小时前
sdut-程序设计基础Ⅰ-实验五一维数组(8-13)
开发语言·数据结构·c++·算法·蓝桥杯·图论·类和对象
载数而行5209 小时前
QT的QString类
c++·qt·学习
像污秽一样9 小时前
算法与设计与分析-习题4.2
算法·排序算法·深度优先·dfs·bfs
Storynone10 小时前
【Day20】LeetCode:39. 组合总和,40. 组合总和II,131. 分割回文串
python·算法·leetcode