QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#873866#3445. Numbers On a Treefernandes_queilaWA 10ms8832kbPython32.7kb2025-01-27 03:35:082025-01-27 03:35:08

Judging History

你现在查看的是最新测评结果

  • [2025-01-27 03:35:08]
  • 评测
  • 测评结果:WA
  • 用时:10ms
  • 内存:8832kb
  • [2025-01-27 03:35:08]
  • 提交

answer

class TreeNode:
    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None
        self.height = 1

class AVLTree:
    def __init__(self):
        self.root = None

    def get_height(self, node):
        if not node:
            return 0
        return node.height

    def update_height(self, node):
        if node:
            node.height = 1 + max(self.get_height(node.left), self.get_height(node.right))

    def balance_factor(self, node):
        if not node:
            return 0
        return self.get_height(node.left) - self.get_height(node.right)

    def rotate_right(self, y):
        x = y.left
        T2 = x.right
        x.right = y
        y.left = T2
        self.update_height(y)
        self.update_height(x)
        return x

    def rotate_left(self, x):
        y = x.right
        T2 = y.left
        y.left = x
        x.right = T2
        self.update_height(x)
        self.update_height(y)
        return y

    def balance(self, node):
        if not node:
            return node

        self.update_height(node)
        balance = self.balance_factor(node)

        if balance > 1:
            if self.balance_factor(node.left) < 0:
                node.left = self.rotate_left(node.left)
            return self.rotate_right(node)

        if balance < -1:
            if self.balance_factor(node.right) > 0:
                node.right = self.rotate_right(node.right)
            return self.rotate_left(node)

        return node

    def insert(self, node, value):
        if not node:
            return TreeNode(value)
        if value < node.value:
            node.left = self.insert(node.left, value)
        else:
            node.right = self.insert(node.right, value)
        return self.balance(node)

    def search_node(self, height, road=""):
        root = (2 ** (height + 1)) - 1
        if not road:
            return root

        node = self.root
        for move in road:
            if move.lower() == 'l':
                if node.left:
                    node = node.left
                else:
                    return -1 
            elif move.lower() == 'r':
                if node.right:
                    node = node.right
                else:
                    return -1  
        return node.value if node else -1

    def insert_root(self, value):
        self.root = self.insert(self.root, value)

def main():
    avl_tree = AVLTree()

    line = input().strip()
    parts = line.split()

    height = int(parts[0])
    road = parts[1] if len(parts) > 1 else ""

    # Inserir n\xf3s na \xe1rvore com base na altura
    num_nodes = (2 ** (height + 1)) - 1
    for i in range(1, num_nodes + 1):
        avl_tree.insert_root(i)

    print(avl_tree.search_node(height, road))

main()

详细

Test #1:

score: 0
Wrong Answer
time: 10ms
memory: 8832kb

input:

3 LR

output:

6

result:

wrong answer 1st lines differ - expected: '11', found: '6'