fork download
  1. from math import*
  2. H=abs
  3. E=enumerate
  4. def C(s,c=[]):
  5. if[]==s and c:yield c;return
  6. if s:yield from[*C(s[1:],c+[s[0]]),*C(s[1:],c)]
  7. I=lambda V,i:{(0,V),(V//i,V%i)}
  8. def W(x,y):
  9. t=[[x,1,0],[y,0,1]]
  10. while t[-1][0]:q=t[-2][0]//t[-1][0];t+=[t[-2][0]%t[-1][0],t[-2][1]-q*t[-1][1],t[-2][2]-q*t[-1][2]],
  11. return t[-2]
  12. def D(a,b,x,y,g):
  13. q=[(0,1,x,y),(0,-1,x,y)]
  14. while q:
  15. m,d,X,Y=q.pop(0);m+=d
  16. if all([X,Y]):yield(X,Y)
  17. J,K=x+m*(b/g),y-m*(a/g);q+=[(m,d,J,K)]*(H(X)+H(Y)>H(J)+H(K)or 1>all([X,Y]))
  18. def f(s):
  19. for O in range(1,len(s)):
  20. for J in sorted(C([*E(s)][:O][::-1]),key=len):
  21. if~-len(J):
  22. q=[(J[0][1],[(1,J[0])],J[1:],s[O])]
  23. while q:
  24. x,R,S,v=q.pop(0)
  25. if S:
  26. y=S[0][1]
  27. for i in range(v-1):
  28. if(v-i)%gcd(x,y)<1:g,a,b=W(X:=max(x,y),Y:=min(x,y));G=(v-i)//g;A,B=min(D(X,Y,[b,a][x>y]*G,[a,b][x>y]*G,g),key=lambda x:sum(map(H,x)));q+=(v-i,[(A*z,l)for z,l in R]+[(B,S[0])],S[1:],i),
  29. else:
  30. for u in I(v,O+1):yield([R,*u],O)
  31. else:
  32. yield([0,s[O]//-~O,s[O]%-~O],O)
  33. for u in I(s[O]%J[0][1],O+1):j=s[O]//J[0][1];yield([[(1,J[0])for _ in range(j)],*u],O);yield([[(j,J[0])],*u],O)
  34. def F(s):
  35. for i in f(s):
  36. e,W=i
  37. if all([[(a==sum(N*s[i+~W+I]for N,(I,_)in e[0])+i*e[1]+e[2]for i,a in E(s,1)if i>max(W-j for _,(j,_)in e[0])),(a==e[1]*i+e[2]for i,a in E(s,1))][[0]==e[:1]],(i==e[-1]for i in s)][[0,0]==e[:2]]):return i
  38.  
  39. print(F([1, 1, 1, 1, 1]))
  40. print(F([1, 2, 3, 4, 5]))
  41. print(F([3, 5, 7, 9, 11]))
  42. print(F([1, 2, 4, 8, 16]))
  43. print(F([1, 4, 7, 10, 13]))
  44. print(F([1, 3, 6, 10]))
  45. print(F([1, 2, 3, 5, 8]))
  46. print(F([1, 8, 127, 2024, 32257, 514088, 8193151]))
  47. print(F([7, 17, 27, 37, 47, 57, 67]))
  48. print(F([1, 17, 289, 4913, 83521, 1419857]))
  49. print(F([1, 1, 4, 10, 28, 76, 208, 568, 1552, 4240]))
Success #stdin #stdout 0.07s 14060KB
stdin
Standard input is empty
stdout
([0, 0, 1], 1)
([0, 1, 0], 1)
([0, 2, 1], 1)
([[(1, (0, 1)), (1, (0, 1))], 0, 0], 1)
([[(1, (1, 4))], 0, 3], 2)
([[(1, (2, 6))], 1, 0], 3)
([[(1.0, (1, 2)), (1.0, (0, 1))], 0, 0], 2)
([[(16.0, (1, 8)), (-1.0, (0, 1))], 0, 0], 2)
([[(1, (1, 17))], 0, 10], 2)
([[(1, (0, 1)), (1, (0, 1)), (1, (0, 1)), (1, (0, 1)), (1, (0, 1)), (1, (0, 1)), (1, (0, 1)), (1, (0, 1)), (1, (0, 1)), (1, (0, 1)), (1, (0, 1)), (1, (0, 1)), (1, (0, 1)), (1, (0, 1)), (1, (0, 1)), (1, (0, 1)), (1, (0, 1))], 0, 0], 1)
([[(2.0, (2, 4)), (2.0, (1, 1))], 0, 0], 3)