Google Kick Start 2020 Round C:Stable Wall。始终为WA,但找不到问题

时间:2020-06-18 01:53:18

标签: python topological-sort

问题陈述:

问题 阿波罗(Apollo)正在玩涉及多米诺骨牌的游戏。聚氨基是通过将一个或多个正方形边缘对边缘连接在一起以形成单个连接形状而制成的形状。游戏涉及将N个多米诺骨牌组合成一个没有任何孔的矩形形状。每个多米诺骨牌均标有从A到Z的唯一字符。

阿波罗完成游戏并创建了一个包含R行和C列的矩形墙。他拍了张照片并将其发送给他的朋友Selene。塞琳(Selene)喜欢墙的图片,但如果墙很稳定,她就更喜欢它们。如果可以通过一次在墙上添加一个多米诺骨来创建墙,则该墙是稳定的,以便始终支持每个多米诺骨。如果每个正方形都在地面上或下面有另一个正方形,则可以支持该多边形。

阿波罗(Apollo)想检查他的墙是否稳定,如果稳定,请告诉她塞琳(Selene)添加多胺基氨基酸的顺序。

输入 输入的第一行给出测试用例的数量,T。每个测试用例均以包含两个整数R和C的线开头。然后,R线跟随,从上到下描述墙。每行包含一串从A到Z的C个大写字符,描述了那排墙。

输出 对于每个测试用例,输出包含Case #x:y的一行,其中x是测试用例编号(从1开始),y是由N个大写字符组成的字符串,描述了他构建它们的顺序。如果有多个这样的命令,则输出其中任何一个。如果墙壁不稳定,则输出-1。

限制 时间限制:每个测试集20秒。 内存限制:1GB。 1≤T≤100。 1≤R≤30。 1≤C≤30。 没有两个多米诺骨牌将标有相同字母。 根据声明中所述的规则,保证输入有效。

测试集1 1≤N≤5。

测试集2 1≤N≤26。

样品

输入

输出

4 4 6 ZOAAMM 佐姆 放大 佐佐姆 4 4 XXOO XFFO XFXO XXXO 5 3 XXX XPX XXX XJX XXX 3 10 AAABBCCDDE AABBCCDDEE AABBCCDDEE

案例1:ZOAM 情况2:-1 情况3:-1 案例4:EDCBA

在示例案例1中,请注意ZOMA是另一个可能的答案。

在示例案例2和示例案例3中,墙是不稳定的,因此答案为-1。

在示例案例4中,唯一可能的答案是EDCBA。

语法预检查 显示测试输入

我的代码:

class Case:
    def __init__(self, arr):
        self.arr = arr

    def solve(self):
        n = len(self.arr)
        if n == 1:
            return ''.join(self.arr[0])
        m = len(self.arr[0])
        dep = {}
        used = set() # to save letters already used
        res = []

        for i in range(n-1):
            for j in range(m):
                # each letter depends on the letter below it
                if self.arr[i][j] not in dep:
                    dep[self.arr[i][j]] = set()
                # only add dependency besides itself
                if self.arr[i+1][j] != self.arr[i][j]:
                    dep[self.arr[i][j]].add(self.arr[i+1][j])
        for j in range(m):
            if self.arr[n-1][j] not in dep:
                dep[self.arr[n-1][j]] = set()
        # always find and desert the letters with all dependencies met
        while len(dep) > 0:
            # count how many letters are used in this round, if none is used, return -1
            count = 0
            next_dep = {}
            for letter in dep:
                if len(dep[letter]) == 0:
                    used.add(letter)
                    count += 1
                    res.append(letter)
                else:
                    all_used = True
                    for neigh in dep[letter]:
                        if neigh not in used:
                            all_used = False
                            break
                    if all_used:
                        used.add(letter)
                        count += 1
                        res.append(letter)
                    else:
                        next_dep[letter] = dep[letter]
            dep = next_dep
            if count == 0:
                return -1
        if count == 0:
                return -1
        return ''.join(res)

t = int(input())
for i in range(1, t + 1): 
    R, C = [int(j) for j in input().split()]
    arr = []
    for j in range(R):
        arr.append([c for c in input()])
    case = Case(arr)
    print("Case #{}: {}".format(i,case.solve()))

我的代码成功通过了我能想到的所有示例案例,但是在提交时仍然保持WA。任何人都可以发现我的解决方案有什么问题吗?谢谢

0 个答案:

没有答案