Giới thiệu
Trong thử thách này, nhiệm vụ của bạn là tìm các chuỗi tổng quát của chuỗi. Các chuỗi con không nhất thiết phải liền kề nhau và chúng cũng có thể "quấn quanh" chuỗi, đi qua kết thúc của nó và bắt đầu lại từ đầu. Tuy nhiên, bạn sẽ muốn giảm thiểu số lượng kết thúc tốt đẹp.
Chính thức hơn, hãy để u
và v
là bất kỳ hai chuỗi, và k ≥ 0
một số nguyên. Chúng tôi nói rằng đó u
là một phần k
tiếp theo của v
, nếu có các chỉ số riêng biệt như vậy , và tại hầu hết các chỉ số đều thỏa mãn . Điều này có nghĩa là có thể được tìm thấy bên trong bằng cách đi từ trái sang phải, chọn một số nhân vật của nó trên đường và quấn quanh nhiều lần (tương đương, thực hiện hầu hết các lần quét ngang ). Lưu ý rằng không có nhân vật nào có thể được chọn nhiều hơn một lần, ngay cả sau khi kết thúc và các phần tiếp theo đó chính xác là các phần tiếp theo thông thường mà chúng ta đều quen thuộc.i1, i2, ..., ilen(u)
u == v[i1] v[i2] ... v[ilen(u)]
k
ij
ij > ij+1
u
v
k
k+1
v
0
Nhiệm vụ
Đầu vào của bạn là hai chuỗi chữ và số không trống u
và v
, và đầu ra của bạn là nhỏ nhất số nguyên k
như vậy mà u
là một k
dãy -wrapping của v
. Nếu không có như vậy k
, đầu ra sẽ được -1
.
Thí dụ
Hãy xem xét các đầu vào u := xyzyxzzxyx
và v := yxzzazzyxxxyz
. Nếu chúng ta bắt đầu tìm kiếm các nhân vật của u
trong v
một cách tham lam, chúng tôi sẽ quấn quanh 3 lần:
yxzzazzyxxxyz
>─x─────y────z┐
┌─────────────┘
└y───────x────┐
┌─────────────┘
└──zz─────x─y─┐
┌─────────────┘
└──────────x──>
Do đó, đầu ra chính xác nhiều nhất là 3. Lưu ý cách ký tự ngoài cùng bên trái x
được chọn một lần, và sau đó bỏ qua trong lần quét thứ hai, vì nó không thể được sử dụng lại. Tuy nhiên, tồn tại một phương thức ngắn hơn chỉ với 2 lần bao quanh:
yxzzazzyxxxyz
>──────────xyz┐
┌─────────────┘
└yxzz────x────┐
┌─────────────┘
└───────y─x───>
Nó chỉ ra rằng một vòng bao quanh (nghĩa là hai lần quét) là không đủ, vì vậy đầu ra chính xác là 2
.
Quy tắc và tiền thưởng
Bạn có thể viết một hàm hoặc một chương trình đầy đủ và bạn cũng có thể thay đổi thứ tự của các đầu vào nếu cần. Số byte thấp nhất sẽ thắng và các sơ hở tiêu chuẩn không được phép.
Có phần thưởng -10% cho việc tính toán tất cả các trường hợp thử nghiệm trong tổng số dưới 10 giây. Tôi sẽ kiểm tra các trường hợp không rõ ràng trên máy của tôi; việc thực hiện tham chiếu của tôi trong Python mất khoảng 0,6 giây. Tôi có một máy tính xách tay 7 năm tuổi với CPU lõi kép 1,86 GHz, bạn có thể muốn tính đến.
Các trường hợp thử nghiệm
"me" "moe" -> 0
"meet" "metro" -> -1
"ababa" "abaab" -> 1
"abaab" "baabaa" -> 1
"1c1C1C2B" "1111CCCcB2" -> 3
"reverse" "reserved" -> 2
"abcdefg" "gfedcba" -> 6
"xyzyxzzxyx" "yxzzazzyxxxyz" -> 2
"aasdffdaasdf" "asdfddasdfsdaafsds" -> 2
x
được sử dụng trong ba lần quét riêng biệt. Nó chỉ có thể được sử dụng một lần.