Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Задача на питоне

Дмитрий Трусов Знаток (355), открыт 4 дня назад
 Мой код с перерасчетов n1, n0 , не прошел по времени, но выдает все правильно: 


n,m,k = map(int,input().split())
a=list(map(int,input().split()))

b=list(map(int,input().split()))

r=0

t=0

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 элементу работал правильно
0 ответов
Похожие вопросы