我的解决方案或我的codejam练习的输出方法有什么不正确?

时间:2018-02-25 12:02:52

标签: python python-3.x algorithm output logic

我参加了谷歌代码果酱竞赛的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))))

我的代码适用于所提供的示例测试用例,因此我的逻辑可能没有缺陷。我认为我的输出方法可能存在错误。

2 个答案:

答案 0 :(得分:1)

我在你的代码中看到了两个问题。

  1. Python标准字典未订购!因此,cities字典将不会按您输入的顺序包含元素(键)。
    • Python 3.1开始,您可以使用OrderedDict作为此
  2. 如果同一个城市重复两次(或更多次),最终结果中只有一个条目,因为字典无法容纳重复的密钥。
  3. 我认为你的设计有流量。此外,我认为你可以轻松地做到这一点,而不会让事情变得太复杂。

    注意: 从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);