我参加了谷歌代码果酱竞赛的kickstart,并陷入了问题1A,称为Gbus计数 我的代码正在传递问题中提供的示例测试用例,但是当我通过将小输入输出到文件来提交它时,它会给我一个错误,错误的响应。
问题链接 - https://code.google.com/codejam/contest/4374486/dashboard#s=p0
$('#hallTable tr:last').find('input').unbind('onchange', 'rowEdited');
我的逻辑:
首先,我将所有测试用例都放在变量t中,对于每个测试用例,我输入了no。公共汽车和列表中所有公共汽车的输入路线l。然后我创建了一个名为bus的字典,并将列表分成n个列表,每个列表中的每个列表都是从字典中的1到n的be = beres。
然后我在另一个名为cities的词典中输入了所有要监控的城市,并将每个要监控的城市的值初始化为0.
最后,我计算了没有。通过检查它是否落在每个公共汽车的路线范围内穿过每个城市的公共汽车,如果是的话,我将相应城市的值增加1,然后将字典的所有值存储在一个列表中,并为每个测试输出情况下。
输出方法:
我使用此行在我的工作目录中使用cmd执行我的代码
t=int(input()) #no. of test cases
for test in range(t):
if test==0:
n=int(input())
else:
input() #to cover up the blank line after each test case
n=int(input())
l=list(map(int,input().split()))
buses={} # the route of each bus will be stored in this dictionary
i=1
for d in l: # this loop is used to store the route of each bus in the buses dictionary
if i not in buses:
buses[i]=[d]
elif len(buses[i])<2:
buses[i].append(d)
else:
i=i+1
buses[i]=[d]
p=int(input())
cities={}
#this dictionary will contain the cities which need to be monitored
for _ in range(p): #first each city is initialized to zero
cities[int(input())]=0
for city in cities: #Monitor all buses in each city if it falls in the route range than increment the city
for bus in buses:
if buses[bus][0]<=city<=buses[bus][1]:
cities[city]+=1
result=[]
for city in cities: #store all the cities in a list
result.append(cities[city])
print("Case #{}: {}".format(test+1, ' '.join(map(str,result))))
我的代码适用于所提供的示例测试用例,因此我的逻辑可能没有缺陷。我认为我的输出方法可能存在错误。
答案 0 :(得分:1)
我在你的代码中看到了两个问题。
cities
字典将不会按您输入的顺序包含元素(键)。
Python 3.1
开始,您可以使用OrderedDict
作为此我认为你的设计有流量。此外,我认为你可以轻松地做到这一点,而不会让事情变得太复杂。
注意:强> 从Python 3.6开始,标准字典默认维护插入顺序。
<强>更新强>
根据要求,以下是我尝试解决问题的方法。
请注意,这可能不是最佳解决方案!当然,这不是最易读的解决方案。这只是我的解决方案。
for case in range(1, int(input())+1):
if case > 1:
input('\n') # consume and print newline
print("Case #{}:".format(case), end='')
bus_count = int(input())
busline = list(map(int, input().strip().split(" ")))
for _ in range(int(input())):
city = int(input())
matches = sum([1 for bid in range(bus_count) if busline[2*bid] <= city <= busline[2*bid+1]])
print(" {}".format(matches), end='')
答案 1 :(得分:0)
您还可以查看以下解决方案:
var filter = Builders<Shipment>.Filter.Eq(x => x._id, "1");
var update = Builders<Shipment>.Update.PullFilter(x => x.attributes.materials,
material => material.status == "Unmatched");
Col.UpdateOne(filter, update);