AcWing 1223. 最大比例 指数的最大公约数
发布日期:2021-05-12 17:10:50 浏览次数:22 分类:精选文章

本文共 2425 字,大约阅读时间需要 8 分钟。

为了解决这个问题,我们需要找到可能的最大等比值,并将其表示为最简分数。给定的奖金数构成一个等比数列,每一级的奖金数都是前一个的固定倍数。我们需要从这些数中推断出最大的可能的等比值。

方法思路

  • 排序数组:首先将给定的奖金数排序,这样可以方便后续处理。
  • 计算可能的公比:遍历数组中的每两个相邻的数,计算它们之间的可能公比。
  • 验证公比:对于每一个可能的公比,检查是否存在一个初始值,使得所有数都能表示为这个初始值乘以公比的若干整数次幂。
  • 选择最大公比:在所有满足条件的公比中,选择最大的那个,并将其化简为最简分数。
  • 解决代码

    import math
    from fractions import Fraction
    def main():
    import sys
    input_data = sys.stdin.read().split()
    n = int(input_data[0])
    X = list(map(int, input_data[1:n+1]))
    X.sort()
    if not X:
    print("0/1")
    return
    max_r = Fraction(0, 1)
    possible_rs = set()
    for i in range(len(X)):
    for j in range(i + 1, len(X)):
    x_j = X[j]
    x_i = X[i]
    if x_i == 0:
    continue
    r = Fraction(x_j, x_i)
    possible_rs.add(r)
    for r in possible_rs:
    a = X[0]
    valid = True
    for x in X:
    if a == 0:
    valid = False
    break
    y = Fraction(x, a)
    if y.denominator != 1:
    valid = False
    break
    if r == 0:
    if y.numerator != 0:
    valid = False
    continue
    if r == 1:
    continue
    try:
    k = y.log() / r.log()
    if not (abs(k - round(k)) < 1e-6):
    valid = False
    break
    k_round = round(k)
    if k_round < 0:
    valid = False
    break
    temp = Fraction(1, 1)
    for _ in range(k_round):
    temp *= r
    if temp > y:
    valid = False
    break
    if temp != y:
    valid = False
    except:
    valid = False
    break
    if valid:
    if r > max_r:
    max_r = r
    if max_r == 0:
    print("0/1")
    else:
    a = max_r.numerator
    b = max_r.denominator
    g = math.gcd(a, b)
    a //= g
    b //= g
    print(f"{a}/{b}")
    if __name__ == "__main__":
    main()

    代码解释

  • 读取输入:从标准输入读取数据,解析出奖金数的个数和具体数值。
  • 排序数组:对奖金数进行排序,以便后续处理。
  • 计算可能的公比:遍历数组中的每两个相邻的数,计算它们的比率,并将这些比率存储起来。
  • 验证每个可能的公比:对于每一个可能的公比,检查是否存在一个初始值,使得所有数都能表示为这个初始值乘以公比的若干整数次幂。
  • 选择最大公比:在所有满足条件的公比中,选择最大的那个,并将其化简为最简分数后输出。
  • 通过这种方法,我们可以准确地找到可能的最大等比值,并将其以最简分数形式输出。

    上一篇:Acwing 1301. C 循环 扩展欧几里得算法
    下一篇:AcWing 1295. X的因子链 理解

    发表评论

    最新留言

    不错!
    [***.144.177.141]2025年04月13日 03时47分59秒