小米 1012
1 均衡
对数组相邻的两个数取反,求取反若干次后的数组的最大和
偶数个负数都可以取反成为全正数,奇数次可以只剩一个最小的负数
n = int(input())
a = list(map(int, input().split()))
res = 0
less_cnt = 0
mi = float('inf')
for i in range(n):mi = min(mi, abs(a[i]))if a[i] <= 0:less_cnt += 1res += abs(a[i])
if less_cnt % 2 == 1:res -= mi * 2
print(res)
2 宝石
from typing import Listclass Node:def __init__(self, key=0, left=None, right=None):self.key = keyself.left = leftself.right = rightclass Stones:def __init__(self, n):self.dummy = Node()self.tail = Node()self.nodeMap = {}cur = self.dummyfor i in range(1, n + 1):newNode = Node(i, cur)self.nodeMap[i] = newNodecur.right = newNodecur = cur.rightcur.right = self.tailself.tail.left = curdef move(self, a, b, op):node_a = self.nodeMap[a]node_b = self.nodeMap[b]self.delete(node_a)if op == 0:self.insert(node_a, node_b)else:self.insert(node_a, node_b.right)def delete(self, node: Node):pre = node.leftnxt = node.rightpre.right = nxtnxt.left = predef insert(self, a_node: Node, b_node: Node):pre = b_node.leftpre.right = a_nodea_node.left = prea_node.right = b_nodeb_node.left = a_nodedef getIdx(self) -> List[int]:res = []cur = self.dummy.rightwhile cur != self.tail:res.append(cur.key)cur = cur.rightreturn resn, q = map(int, input().split())
op_list = list(map(int, input().split()))
stones = Stones(n)
for i in range(0, len(op_list), 3):a, b, op = op_list[i], op_list[i + 1], op_list[i + 2]stones.move(a, b, op)
res = stones.getIdx()
print(" ".join(map(str, res)))