สมมติว่าเรามีตัวอักษรจำนวน m และค่าอื่น n เราต้องนับจำนวนสตริงที่มีความยาว n ที่สร้างด้วยตัวอักษรโดยใช้ตัวอักษร m เหล่านี้ และ string ไม่มีสตริงย่อย palindromic ที่มีความยาวมากกว่า 1 หากคำตอบใหญ่เกินไป ให้แก้ไขผลลัพธ์ด้วย 10^9+7พี>
ดังนั้น หากอินพุตเป็น n =2 m =3 ผลลัพธ์จะเป็น 6 เนื่องจาก m =3 ดังนั้นหากตัวอักษรเป็น {x,y,z} เราสามารถสร้างสตริงเช่น [xx,xy,xz ,yx,yy,yz,zx,zy,zz] แต่ [xx,yy,zz] ไม่ถูกต้อง ดังนั้นจึงมี 6 สตริง
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- p :=10^9+7
- ถ้า n เหมือนกับ 1 แล้ว
- คืนค่า m mod p
- ถ้า n เหมือนกับ 2 แล้ว
- คืนค่า m *(m - 1) mod p
- ถ้า m <=2 แล้ว
- คืน 0
- คืนค่า m*(m-1) * ((m-2)^(n-2) mod p) mod p
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(n, m):
p = 10**9+7
if n == 1:
return m % p
if n == 2:
return m * (m - 1) % p
if m <= 2:
return 0
return m * (m - 1) * pow(m - 2, n - 2, p) % p
n = 2
m = 3
print(solve(n, m)) อินพุต
3, [1,2,3,4,1]
ผลลัพธ์
6