s=set(a)|set(b) f={} for i in s: f[i]=0 for i in b: f[i]+=1 for j in range(m): f[a[j]]-=1 k=len(s) for i in range(n-m+1): n1=0 n0=0 for j in s: if f[j]==0: n0+=1 elif f[j]==1 or f[j]==-1: n1+=1 if n1+n0==k: if n1==2 or n0==k: r+=1 f[a[i]]+=1 if n>m+i: f[a[m+i]]-=1 print(r)
Мой код без перерасчета n1 и n0, выдает WA:
n, m, k = map(int, input().split()) a = list(map(int, input().split()))
b = list(map(int, input().split()))
r = 0 n0 = 0 n1 = 0 t = 0 pol=False s = set(a) | set(b) f = {} for i in s: f[i] = 0 for i in b: f[i] += 1 for j in range(m): f[a[j]] -= 1 k = len(s) for j in s: if f[j] == 0: n0 += 1 elif f[j] == 1 or f[j] == -1: n1 += 1 for i in range(n - m + 1):
if n1 + n0 == k: if n1 == 2 or n0 == k: r += 1
if f[a[i]] == 1: n1 -= 1 pol=True elif f[a[i]] == -1: n1-=1 pol=False elif f[a[i]] == 0: n0 -= 1 f[a[i]] += 1 if n > m + i: f[a[m + i]] -= 1 if f[a[m + i]] == 1 and not pol: n1 += 1 elif f[a[m+i]]==-1 and pol: n1+=1 elif f[a[m + i]] == 0: n0 += 1 print(r)
Помогите сделать так, чтобы сдвиг по 1 элементу работал правильно
Помогите сделать так, чтобы сдвиг по 1 элементу работал правильно