【发布时间】:2019-07-29 21:05:36
【问题描述】:
我试图解决 USACO 的项链断裂问题,我遇到了这个解决方案。问题陈述在这里:https://train.usaco.org/usacoprob2?S=beads&a=c3sjno1crwH
我很困惑为什么写这个解决方案的人复制了 3 个初始字符串,基本上是整个 for 循环。
我已经尝试在网上寻找其他可能更好地解释它的解决方案,但是对于这个问题有少量的 python 解决方案,其中许多是完全不同的。
'''
ID: krishpa2
LANG: PYTHON3
TASK: beads
'''
with open('beads.in','r') as fin:
N = int(fin.readline())
beads = fin.readline()[:-1]
def canCollect(s):
return not ('r' in s and 'b' in s)
beads = beads*3
max = 0
for p in range(N, N*2):
i = p-1
left = []
while i > 0:
if canCollect(left + [beads[i]]):
left.append(beads[i])
i -= 1
else:
break
i = p
right = []
while i < 3*N - 1:
if canCollect(right + [beads[i]]):
right.append(beads[i])
i+=1
else:
break
result = len(left) + len(right)
if result >= N:
max = N
break
elif result > max:
max = result
print(max)
with open('beads.out','w') as fout:
fout.write(str(max) + '\n')
程序运行正常,我只是想知道为什么。
【问题讨论】:
-
尝试在this visualizer 中复制您的代码,然后自己查看代码的运行步骤。任何人都可以在这里解释一下会更好......
-
这里的解决方案broken necklace简单来说你需要连续找到每个珠子的频率,即有多少相同颜色的珠子在一起,一次取2个颜色频率,总和大的两个是你的解决方案
-
@prashantrana 我查看了该解决方案,但如果珠子 =“rrr”,它会使 USACO 分级机失败。编辑:我添加了一个子句,如果珠子 == 珠子 [::-1],它返回珠子的长度。我提交了该解决方案,它通过了 USACO 分级机。
-
酷,恭喜,有任何问题都可以到 GitHub 寻找代码解决方案
标签: python arrays python-3.x loops