社区讨论

大家可以来挑战一下,答错的话要把头像换成 baka 一天

灌水区参与者 13已保存回复 54

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
52 条
当前快照
1 份
快照标识符
@lyleqwss
此快照首次捕获于
2024/07/14 18:23
2 年前
此快照最后确认于
2024/07/15 13:37
2 年前
查看原帖
这是一个正经的求助帖。标题是瞎写的。
在某群看到这个玩意,因为我已经几个月没碰 OI 和数学了,所以我不知道这个东西怎么做,或者说有没有做出来的可能。
某群群友告诉我这是钓鱼题,但是我还是很好奇能不能用程序跑出来。
以下是我写的程序。因为 C++ long long 炸了,不想写高精,所以我用的 py。
PY

import sys
sys.setrecursionlimit(int(1e6))
# 递归深度限制为 1e6

memory = {}

def gcd(a, b):
    if b == 0:
        return a
    else:
        return gcd(b, a % b)

def reduced(x):
    if x[1] < 0:
        x[0] *= -1
        x[1] *= -1
    g = gcd(x[0], x[1])
    y = (x[0] // g, x[1] // g)
    return y

def sub(a, b):
    a = reduced(a)
    b = reduced(b)
    l = a[1] // gcd(a[1], b[1]) * b[1]
    return (a[0] * (l // a[1]) - b[0] * (l // b[1]), l)

def f(x):
    if memory.get(x) != None:
        return memory.get(x)
    x = reduced(x)
    if x[0] < 0:
        memory[x] = (-x[0], x[1])
        return memory[x]
    else:
        y = f(sub(x, f(sub(x, [1, 1]))))
        memory[x] = (y[0], y[1] * 2)
        return memory[x]

if __name__ == "__main__":
    print(reduced(f((3, 1))))

然后 py 也炸了。

回复

54 条回复,欢迎继续交流。

正在加载回复...