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;
}
相关推荐
良月澪二1 小时前
CSP-S 2021 T1廊桥分配
算法·图论
wangyue42 小时前
c# 线性回归和多项式拟合
算法
&梧桐树夏2 小时前
【算法系列-链表】删除链表的倒数第N个结点
数据结构·算法·链表
QuantumStack2 小时前
【C++ 真题】B2037 奇偶数判断
数据结构·c++·算法
今天好像不上班2 小时前
软件验证与确认实验二-单元测试
测试工具·算法
wclass-zhengge3 小时前
数据结构篇(绪论)
java·数据结构·算法
何事驚慌3 小时前
2024/10/5 数据结构打卡
java·数据结构·算法
结衣结衣.3 小时前
C++ 类和对象的初步介绍
java·开发语言·数据结构·c++·笔记·学习·算法
学习使我变快乐3 小时前
C++:静态成员
开发语言·c++
心怀花木3 小时前
【C++】多态
c++·多态