結果
| 問題 |
No.2500 Products in a Range
|
| コンテスト | |
| ユーザー |
titia
|
| 提出日時 | 2023-10-13 23:26:09 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,174 bytes |
| コンパイル時間 | 236 ms |
| コンパイル使用メモリ | 82,176 KB |
| 実行使用メモリ | 78,644 KB |
| 最終ジャッジ日時 | 2024-09-15 19:18:37 |
| 合計ジャッジ時間 | 25,764 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 30 WA * 27 TLE * 4 |
ソースコード
from bisect import bisect,bisect_left
n,l,r=map(int,input().split())
A=list(map(int,input().split()))
PLUS=[]
MINUS=[]
zero=0
for a in A:
if a>0:
PLUS.append(a)
elif a<0:
MINUS.append(a)
else:
zero+=1
PLUS.sort()
MINUS.sort()
def check(x,y,A):
for i in range(x+1,x+3):
if x<=i<=y:
if x!=i:
if l<=A[x]*A[i]<=r:
pass
else:
return False
if y!=i:
if l<=A[y]*A[i]<=r:
pass
else:
return False
for i in range(y-2,y):
if x<=i<=y:
if x!=i:
if l<=A[x]*A[i]<=r:
pass
else:
return False
if y!=i:
if l<=A[y]*A[i]<=r:
pass
else:
return False
return True
ANS=0
for i in range(len(PLUS)):
for ind in range(i,len(PLUS)):
if check(i,ind,PLUS)==False:
break
k0=PLUS[i]
k1=PLUS[ind]
if l>=0:
MIN=max(l//k0,l//k1)
else:
MIN=max((l+k0-1)//k0,(l+k1-1)//k1)
if r>=0:
MAX=min(r//k0,r//k1)
else:
MAX=min((r+k0-1)//k0,(r+k1-1)//k1)
plus=0
if MIN<=MAX:
x0=bisect_left(MINUS,MIN)
x1=bisect(MINUS,MAX)
plus=x1-x0
#print(i,ind,MIN,MAX,plus)
ANS=max(ANS,ind-i+1+plus)
for i in range(len(MINUS)):
for ind in range(i,len(MINUS)):
if check(i,ind,MINUS)==False:
break
k0=MINUS[i]
k1=MINUS[ind]
if l>=0:
MAX=min(l//k0,l//k1)
else:
MAX=min((l+k0-1)//k0,(l+k1-1)//k1)
if r>=0:
MIN=max(r//k0,r//k1)
else:
MIN=max((r+k0-1)//k0,(r+k1-1)//k1)
plus=0
if MIN<=MAX:
x0=bisect_left(PLUS,MIN)
x1=bisect(PLUS,MAX)
plus=x1-x0
#print(i,ind,MIN,MAX,plus)
ANS=max(ANS,ind-i+1+plus)
print(ANS)
titia