我正在尝试阅读一些行,直到EOF回答这个问题:
https://open.kattis.com/problems/tight
这是我尝试过的:
from collections import defaultdict
import sys
def get_ans(n, k):
dp = defaultdict(int)
total = defaultdict(int)
for i in range(n):
for num in range(k+1):
if num+1 <= k:
dp[(i, num)] += dp[(i-1, num+1)]
if num-1 >= 0:
dp[(i, num)] += dp[(i-1, num-1)]
dp[(i, num)] += dp[(i-1, num)]
dp[(i, num)] = max(dp[(i, num)], 1)
total[i] += dp[(i, num)]
return total[n-1]/((k+1)**n)*100
def main():
for line in sys.stdin:
if line == "":
break
print(line)
k, n = map(int, input().split())
ans = get_ans(n, k)
print(str.format('{0:.6f}', ans))
if __name__ == "__main__":
main()
问题:如果我复制输入并将其全部粘贴到终端中运行脚本,我的输出如下所示:
我的输入:
4 1
2 5
3 5
8 7
终端输出
40.740741
3 5
似乎有些行没有被处理 - 我不明白为什么。
有人可以指出我正确的方向吗?
main
我建议使用 while 循环,并且正如已经指出的那样input
input
为您处理来自sys.stdin
的传入数据。
def main():
line = input()
while line:
k, n = map(int, line.split())
ans = get_ans(n, k)
print(str.format('{0:.6f}', ans))
line = input()
正如@ForceBru指出的那样,我是在input()
而不是line
上分裂。