Problem Müəllifi: | Hasan Saleh (MathModel) |
Hazırlayan: | Hasan Saleh (MathModel) |
Redaktə edən: | Hasan Saleh (MathModel) |
Həll
İlk öncə massivi uzunluğu n-1 olan bir string -yə çeviririk:
İndi problem budur: -nin alt stringi olaraq görünürmü, uyğunluq qaydası altında
Məhdudiyyətlər kiçik olduğuna görə, sadəcə hər bir başlanğıc mövqeyini yoxlaya bilərik. 0 \le i \le (n-1)-k olan hər bir üçün -dan k-1-ə qədər bütün -ləri yoxlayırıq. Əgər hər hansı bir üçün yuxarıdakı şərt pozulursa, bu pəncərə pisdir. Əgər bütün üçün bu şərt yerinə yetirilən bir pəncərə tapsaq, cavabımız BƏLİ olacaq. Əgər heç bir pəncərə işləmir, cavabımız XAHİŞ ETMİRƏM olacaq.
Rəsmi olaraq, biz BƏLİ cavabını veririk əgər
Hər test üçün mürəkkəblik -dir: -ni qurmaq alır, və biz ən çox pəncərəni yoxlayırıq, hər biri -də. Bu, \sum n\cdot k üçün verilmiş sərhədi uyğunlaşdırır. Nümunə testləri bu qaydadan birbaşa gəlir: massivin fərq stringi bəzi '?'-ni '+' və ya '-' kimi şərh edərək naxış kimi oxuna bilirsə, cavabımız BƏLİ olacaq; əks halda, XAHİŞ ETMİRƏM olacaq.
Mürəkkəblik .
def solve():
n,k=map(int,input().split())
a=list(map(int,input().split()))
s=input().strip()
t=[]
for i in range(n-1):
if a[i]<a[i+1]: t.append('+')
elif a[i]>a[i+1]: t.append('-')
else: t.append('?')
ok=False
for i in range(n-1-k+1):
good=True
for j in range(k):
x=t[i+j]; y=s[j]
if x=='?' or y=='?': continue
if x!=y:
good=False
break
if good:
ok=True
break
print("BƏLİ" if ok else "XAHİŞ ETMİRƏM")
for _ in range(int(input())):
solve()