专栏文章
题解:UVA10523 Very Easy !!!
UVA10523题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mioy6igf
- 此快照首次捕获于
- 2025/12/03 03:04 3 个月前
- 此快照最后确认于
- 2025/12/03 03:04 3 个月前
非常简单的题目,直接模拟就可以了。
考虑小优化之后,抛开高精度之后复杂度是 的,完全没有问题。
高精度并不是什么很有技术的事情,所以直接给出 Python 代码,也更加方便理解。
PYimport sys
seq=sys.stdin.readlines()
for _ in seq:
n,a=map(int,_.split(' '))
ans=0
k=1
for __ in range(n):
k*=a
ans+=(__+1)*k
print(ans)
但是实际上这里可以直接使用公式。
我们记要求的和式 。
则
而且这里是没有任何取模运算的,所以可以直接用等比数列的求和公式算,就像这样:
PYimport sys
def main():
data = sys.stdin.read().split()
if not data:
return
idx = 0
results = []
while idx < len(data):
n = int(data[idx])
a = int(data[idx+1])
idx += 2
if a == 1:
ans = n * (n + 1) // 2
else:
an = pow(a, n)
an1 = an * a a^{n+1}
numerator = a * (1 - (n + 1) * an + n * an1)
denominator = (1 - a) * (1 - a)
ans = numerator // denominator
results.append(str(ans))
print("\n".join(results))
if __name__ == "__main__":
main()
这个就跑的飞快了,比常规的 C++ 高精度版本还快的多。
如果还要更快,就只能祭出我 C++ 了。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...