未完待续
以下代码均通过 pypy3 ac
按照规则模拟即可
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()
把两个数组的所有数的质因数收集起来,之后再比较
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')
每个子树的同一层子节点时连续数字,因此只需要向下逐层扩展组左右边界,直接统计符合要求的点的个数即可
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))