|
发表于 2020-1-29 15:15:19
|
显示全部楼层
花了10多页草稿纸。。。发现自己数列求和全还给高中老师了- def func316(l:list,k:int):
- N=len(l)
- if (N<4):
- return 0
- tmp={}
- for i in l:
- tmp[i]=tmp.get(i,0)+1
- l=list(sorted(tmp.items(),key=lambda x:x[0]))
- sum=0
- for i in range(len(l)):
- sum+=l[i][1]
- l[i]=(l[i][0],l[i][1],sum)
- ret=0
- for i in range(len(l)):
- for j in range(i,len(l)):
- p,q=j,len(l)-1
- while p<=q:
- if l[i][0]*l[j][0]*l[p][0]*l[q][0]>k:
- q-=1
- else:
- if p==j:
- if i==j:
- t,a=l[q][2]-l[p][2]+l[p][1]-3,l[p][1]-3
- if a>=0:
- ret+=(-3*a**4+(4*t-18)*a**3+(24*t-33)*a**2+(44*t-18)*a+24*t)//24
- else:
- t,a=l[q][2]-l[p][2]+l[p][1]-2,l[p][1]-2
- if a>=0:
- ret+=l[i][1]*(-2*a**3+(3*t-6)*a**2+(9*t-4)*a+6*t)//6
- else:
- if i==j:
- base=l[i][1]*(l[i][1]-1)//2
- else:
- base=l[i][1]*l[j][1]
- ret+=base*(2*l[q][2]-2*l[p][2]+l[p][1]-1)*l[p][1]//2
- p+=1
- return ret
复制代码 |
评分
-
查看全部评分
|