USACO的帮助,我的程序应该可以运行,但是会抛出错误

时间:2019-03-29 18:34:16

标签: python-3.x

在做USACO US OPEN青铜器问题时,我已经有了所有代码,无论我给出什么版本,它都给我正确的答案。如果有人想尝试的话,它叫做“桶队”。

这是10x10的图形 .......... .......... .......... ..B ....... .......... ..... R .... .......... .......... ..... L .... ..........

农场着火了,奶牛们赶紧去扑灭它! 农场由10×10的字符网格描述,如下所示:

........ .......... .......... ..B ....... .......... ..... R .... .......... .......... ..... L .... .......... 字符“ B”代表着火的谷仓。 “ L”代表湖泊,“ R”代表大石头的位置。

奶牛希望通过将自己置于湖和谷仓之间的路径上来形成“桶大队”,以便它们可以沿路径通过水桶以扑灭大火。如果桶在北,南,东或西方向上紧邻,则它们可以在母牛之间移动。湖边的一头母牛也是如此-如果母牛紧挨着湖,只能从湖中抽一桶水。同样,一头母牛如果紧邻牛舍,就只能在牛舍上扔一桶水。

请帮助确定“。”的最小数目。应该被奶牛占领的方格组成一个成功的水桶大队。

一头母牛不能放在包含大块岩石的广场上,并​​且保证谷仓和湖泊不会彼此紧邻。

输入格式(文件buckets.in): 输入文件包含10行,每行10个字符,描述服务器场的布局。 输出格式(文件buckets.out): 输出一个整数,给出形成可行的水桶旅所需的最少母牛数量。 样本输入: .......... .......... .......... ..B ....... .......... ..... R .... .......... .......... ..... L .... .......... 样品输出: 7

对于第一个测试是样本,我得到了正确的结果,但是其他7个表明我的输出不正确。这是我的代码

'''
# 57 % 25 is mod
fin = open ('buckets.in', 'r')
fout = open('buckets.out', 'w')

#COMETQ \n
inp = fin.read().splitlines()
first = inp[0]
second = inp[1]
third = inp[2]
fourth = inp[3]
fifth = inp[4]
sixth = inp[5]
seventh = inp[6]
eighth = inp[7]
ninth = inp[8]
tenth = inp[9]
Barny = 0

if first.find("B") >= 0:
    Barny = 0
if second.find("B") >= 0:
    Barny = 1 
if third.find("B") >= 0:
    Barny = 2 
if fourth.find("B") >= 0:
    Barny = 3
if fifth.find("B") >= 0:
    Barny = 4
if sixth.find("B") >= 0:
    Barny = 5
if seventh.find("B") >= 0:
    Barny = 6
if eighth.find("B") >= 0:
    Barny = 7
if ninth.find("B") >= 0:
    Barny = 8
if tenth.find("B") >= 0:
    Barny = 9



Barnx = inp[Barny].find("B")
if first.find("L") >= 0:
    Lakey = 0
if second.find("L") >= 0:
    Lakey = 1
if third.find("L") >= 0:
    Lakey = 2
if fourth.find("L") >= 0:
    Lakey = 3
if fifth.find("L") >= 0:
    Lakey = 4
if sixth.find("L") >= 0:
    Lakey = 5
if seventh.find("L") >= 0:
    Lakey = 6
if eighth.find("L") >= 0:
    Lakey = 7
if ninth.find("L") >= 0:
    Lakey = 8
if tenth.find("L") >= 0:
    Lakey = 9

Lakex = inp[Lakey].find("L")

if first.find("R") >= 0:
    Rocky = 0
if second.find("R") >= 0:
    Rocky = 1
if third.find("R") >= 0:
    Rocky = 2
if fourth.find("R") >= 0:
    Rocky = 3
if fifth.find("R") >= 0:
    Rocky = 4
if sixth.find("R") >= 0:
    Rocky = 5
if seventh.find("R") >= 0:
    Rocky = 6
if eighth.find("R") >= 0:
    Rocky = 7
if ninth.find("R") >= 0:
    Rocky = 8
if tenth.find("R") >= 0:
    Rocky = 9

Rockx = inp[Rocky].find("R")



Ansx = Lakex - Barnx
Ansy = Lakey - Barny


if Ansx == 0:
  Final = ((Ansy*Ansy)/Ansy)+2
elif Ansy == 0:
  Final = ((Ansx*Ansx)/Ansx)+2
else:
  Final = ((Ansx*Ansx)/Ansx)+((Ansy*Ansy)/Ansy)

Finalout = int(Final)

print(Finalout-1)
fout.write(str(Finalout-1))
fout.close()
'''

所以buckets.in是10x10的图形 和buckets.out应该为7,但是它们测试了8种不同的版本,例如位于其他地方的湖泊和谷仓。

我该如何修正我的代码?不幸的是我的5个小时已经到了,所以我不能做

感谢任何有帮助的人

1 个答案:

答案 0 :(得分:1)

这是一个竞争问题,涉及此类问题时,您不应在线获得帮助或发布解决方案。请在比赛结束后讨论这些问题,以确保公平竞争。