結果
問題 |
No.854 公平なりんご分配
|
ユーザー |
|
提出日時 | 2022-05-21 23:07:42 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,387 bytes |
コンパイル時間 | 370 ms |
コンパイル使用メモリ | 82,048 KB |
実行使用メモリ | 298,836 KB |
最終ジャッジ日時 | 2024-09-20 12:11:37 |
合計ジャッジ時間 | 38,786 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 2 WA * 48 TLE * 1 -- * 41 |
ソースコード
import sys input = sys.stdin.readline n = int(input()) A = list(map(int,input().split())) q = int(input()) P = [] LR = [] for i in range(q): p,l,r = map(int,input().split()) P.append(p) LR.append([l-1,r]) M = 2*10**3+5 count = [0]*M primes = [] for i in range(2,M): if count[i]: continue primes.append(i) for j in range(i,M,i): count[j] += 1 ans = [0]*q zero = [0]*(n+1) for i,a in enumerate(A,1): zero[i] = zero[i-1]+int(a==0) ind = [] for i in range(q): p = P[i] l,r = LR[i] if zero[r]-zero[l]: ans[i] = 1 continue np = p for p in primes: while np%p == 0: np //= p if np == 1: ind.append(i) # for j,p in enumerate(primes): # accum[i][j] = accum[i-1][j] # while a%p == 0: # a //= p # accum[i][j] += 1 accum = [0]*(n+1) for p in primes: for i,a in enumerate(A,1): accum[i] += accum[i-1] while a%p == 0: accum[i] += 1 a //= p nind = [] for i in ind: np = P[i] l,r = LR[i] num = accum[r]-accum[l] while num and np%p == 0: num -= 1 np //= p if np == 1: ans[i] = 1 continue P[i] = np nind.append(i) ind = nind for i in ans: print("Yes" if i else "NO")