一:外卖订单
认真处理特殊情况即可
二:小美的字符串匹配度
前缀和+双指针
三: 小美的树上染色
树型dp
四:小美的排列询问
哈希表
五:小美的排列构造
六:小美的字符串变换
并查集 + 遍历
n = int(input())
origin = list(input())
res = float('inf')
class UF:
def __init__(self, n) -> None:
self.parent = []
self.index = []
for i in range(n):
self.parent.append(i)
self.index.append(i)
def find(self, x) -> int:
if x != self.parent[x]:
x = self.find(self.parent[self.parent[x]])
return x
def union(self, x, y) -> None:
px = self.find(x)
py = self.find(y)
if px == py: return
self.parent[py] = px
def solve(grid) -> int:
n = len(grid)
m = len(grid[0])
uf = UF(n * m)
ret = set()
for r in range(n):
for c in range(m):
for x, y in [[r-1, c], [r+1, c], [r, c-1], [r, c+1]]:
if 0 <= x < n and 0 <= y < m:
if grid[r][c] == grid[x][y]:
uf.union(r*m + c, x*m + y)
for i in range(n*m):
ret.add(uf.find(i))
return len(ret)
for r in range(1, n): # r行c列
if n % r == 0:
c = n // r
grid = []
for i in range(r):
grid.append(origin[i*c: i*c + c])
res = min(res, solve(grid))
if n == 1:
print(1)
else:
print(res)
七:切蛋糕
八: 小美的好矩阵
这题暴力只能过90%的例子呜呜呜