結果
| 問題 |
No.1746 Sqrt Integer Segments
|
| ユーザー |
|
| 提出日時 | 2024-11-30 22:51:36 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 709 ms / 2,000 ms |
| コード長 | 1,178 bytes |
| コンパイル時間 | 330 ms |
| コンパイル使用メモリ | 82,048 KB |
| 実行使用メモリ | 142,468 KB |
| 最終ジャッジ日時 | 2024-11-30 22:51:54 |
| 合計ジャッジ時間 | 15,363 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 28 |
ソースコード
import random
from collections import defaultdict
MOD = 1788747373638354509
def factor(x: int):
res = []
while x % 2 == 0:
res.append([2, 0])
while x % 2 == 0:
res[-1][1] += 1
x //= 2
y = 3
while y * y <= x:
if x % y == 0:
res.append([y, 0])
while x % y == 0:
res[-1][1] += 1
x //= y
y += 2
if x != 1:
res.append([x, 1])
return res
def solve():
N = int(input())
A = list(map(int, input().split()))
M = 10**6
ha = [random.randint(0, MOD-1) for _ in range(M+1)]
memo = {}
hash_values = [0] * N
for i in range(N):
if A[i] not in memo:
val = 0
for p, e in factor(A[i]):
val ^= ha[p] * (e & 1)
memo[A[i]] = val
hash_values[i] = memo[A[i]]
pref = [0] * (N + 1)
for i in range(N):
pref[i + 1] = pref[i] ^ hash_values[i]
ans = 0
mp = defaultdict(int)
for i in range(N + 1):
ans += mp[pref[i]]
mp[pref[i]] += 1
print(ans)
if __name__ == "__main__":
solve()