未完待续

以下代码均通过 pypy3 ac

A幼稚园的树

按照规则模拟即可

t=int(input())
for i in range(t):
    n=input()
    h=list(map(int,input().split()))
    a,k,b=map(int,input().split())
    m=int(input())
    for d in h:
        for j in range(m-1):
            d+=a
            if d>k:
                d=b
        print(d,end=' ')
    print()            

C数组划分

把两个数组的所有数的质因数收集起来,之后再比较

from typing import *
def div(arr:List[int])->List[int]:
    ans=[0]*(10**6+5)
    for k in arr:
        for i in range(2,k+1):
            if i*i>k:
                break
            if not k%i:
                ans[i]=1
                while not k%i:
                    k//=i
        if k>1:
            ans[k]=1
    return ans
n=input()
a,b=list(map(int,input().split())),list(map(int,input().split()))
arr1,arr2=div(a),div(b)
has=True
for i in range(len(arr1)):
    if arr1[i] and arr2[i]:
        has=False
        break
print('Yes' if has else 'No')

D子树的大小

每个子树的同一层子节点时连续数字,因此只需要向下逐层扩展组左右边界,直接统计符合要求的点的个数即可

def count(p:int,k:int,n:int)->int:
    if k==1:
        return n-p
    ans=0
    l,r=p,p
    while l<n:
        ans+=r-l+1
        l,r=l*k+1,min(n-1,r*k+k)
    return ans
t=int(input())
for i in range(t):
    n,k,m=map(int,input().split())
    q=list(map(int,input().split()))
    for qq in q:
        print(count(qq,k,n))