过几天就省赛了,一直以来用的是C++,Python蓝桥杯也是刚刚开始准备(虽然深度学习用的都是python,但是两者基本没有任何关系),这两天在做去年题时犯了很多低级错误,因此记录一下以便自己复查
PS:很多问题的实现其实都是基于C++换成python的,因此很多代码显得比较丑,还请见谅。
为了结构清晰,我从Python易错点和2024年题目这两部分进行展开:
2024真题(大部分写了,但有一小部分没有做):
1.树状数组+思维:6000. 植物生命力 - AcWing题库
思路:
我们反过去考虑,一个点的贡献不就是当前链上的比他大的又不是它的倍数的点的个数吗?这个链怎么保证呢?DFS递归序列不就是一条链吗,因此这点可以通过DFS实现,那怎么查到比他大的数又不是整除的呢?不妨先考虑比他大的,我们在DFS过程中维护树状数组即可,我们再通过枚举它的倍数对整除的进行排除即可。
代码实现:
import sys
from types import GeneratorType
def bootstrap(f, stack=[]):
def wrappedfunc(*args, **kwargs):
if stack:
return f(*args, **kwargs)
else:
to = f(*args, **kwargs)
while True:
if type(to) is GeneratorType:
stack.append(to)
to = next(to)
else:
stack.pop()
if not stack:
break
to = stack[-1].send(to)
return to
return wrappedfunc
n,s=map(int,input().split())
a=list(map(int,input().split()))
a=[0]+a
edge=[[] for i in range(n+10)]
tr=[0 for i in range(200010)]
vis=[0 for i in range(200010)]
ans=0
def lowbit(x):
return x&-x
def add(pos,v):
while pos<=n:
tr[pos]+=v
pos=pos+lowbit(pos)
def get(pos):
res=0
while pos>0:
res+=tr[pos]
pos-=lowbit(pos)
return res
@bootstrap
def dfs(root,fa):
global ans
global n
res=get(n)-get(a[root])
for i in range(2*a[root],n+1,a[root]):
if vis[i]==1:
res-=1
ans+=res
vis[a[root]]=1
add(a[root],1)
for i in edge[root]:
if i==fa:
continue
yield dfs(i,root)
vis[a[root]]=0
add(a[root],-1)
yield None
for _ in range(n-1):
u,v=map(int,input().split())
edge[u].append(v)
edge[v].append(u)
dfs(s,-1)
print(ans)
2.trie树链路减法:5999. 最大异或结点 - AcWing题库
思路:如果不管那个不能异或相连的点的话就是一个很板的字典树问题,现在我们的问题就是如何解决这个相连点不能异或的限制。
比较直观的想法就是把那个节点相邻的点从字典树中删除,然后正常操作,最后再恢复,那么如何实现呢?比较巧妙地,我们再新开一个数组来记下树上每个点的出现次数,删除的话就是依次从树链中走下来,走到的节点位置次数-1即可。
代码实现:
import sys
from types import GeneratorType
def bootstrap(f, stack=[]):
def wrappedfunc(*args, **kwargs):
if stack:
return f(*args, **kwargs)
else:
to = f(*args, **kwargs)
while True:
if type(to) is GeneratorType:
stack.append(to)
to = next(to)
else:
stack.pop()
if not stack:
break
to = stack[-1].send(to)
return to
return wrappedfunc
ans = 0
ind = 1
n = int(input())
N = 32

最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



