拼多多0802笔试第二题-半暴力解法

#coding=utf-8

lookup = [
    [2, 5, 3, 4],
    [4, 3, 5, 2],
    [0, 4, 1, 5],
    [5, 1, 4, 0],
    [2, 0, 3, 1],
    [1, 3, 0, 2]
]

def check_seq(a, b):
    biaobing = a[0]
    a_index = 0
    b_index = 0
    for i, item in enumerate(b):
        if item == biaobing:
            b_index = i
    for _ in range(4):
        if a[a_index] != b[b_index]:
            return False
        a_index += 1
        a_index %= 4
        b_index += 1
        b_index %= 4
    return True
def take_seq(a, index):
    return [a[i] for i in index]

def whether_same(a, b):
    a_seq = take_seq(a, lookup[0])
    b_index = 0
    for i, item in enumerate(b):
        if item == a[0]:
            b_index = i
    b_seq = take_seq(b, lookup[b_index])

    return check_seq(a_seq, b_seq)

def solution(shaizi):
    visited = [False for _ in range(len(shaizi))]
    classes = []
    for i in range(len(shaizi)):
        num_same = 1
        if visited[i]:
            continue
        else:
            visited[i] = True
        for j in range(len(shaizi)):
            if not visited[j] and whether_same(shaizi[i], shaizi[j]):
                num_same += 1
                visited[j] = True
        classes.append(num_same)
    classes = sorted(classes, reverse=True)
    print(len(classes))
    for item in classes:
        print('{} '.format(item), end='')

import sys
if __name__ == "__main__":
    # 读取第一行的n
    n = int(sys.stdin.readline().strip())
    shaizi = []
    for i in range(n):
        # 读取每一行
        line = sys.stdin.readline().strip()
        # 把每一行的数字分隔后转化成int列表
        values = list(map(int, line.split()))
        shaizi.append(values)
    solution(shaizi)
想了半天,终于想明白判断两个骰子是否相等怎么写。。
一开始还以为分组得用并查集,没想到暴力循环就过了
写的很着急 大家就不要吐槽代码写的啰嗦了 就写了10分钟
#拼多多#
全部评论
请问这个查找表 怎么回事呀,能写一下大致的思路吗
点赞 回复
分享
发布于 2020-08-09 19:27

相关推荐

1 2 评论
分享
牛客网
牛客企业服务