ABC339F 题解
\(\color{red}1\le A_i\le 10 ^ {1000}\)
\(\begin{aligned}N \\ A_1\\A_2\\ \vdots\\ A_N\end{aligned}\)
大数字加换行输入,这不明摆着让你用 Python。
当然,\(O(n^3)\) 暴力判断明显不可取,还需要一些优化 (赛时用 \(O(n^3)\) 然后没过,赛后才 AC,愤怒)。
咋做呢,先对数组排序,然后用 Counter() 函数求出数组中每个数的数量,定义数组为 \(cnt\),然后定义变量 \(ans=0\),再开个 \(O(n^2)\) 循环,\(ans\leftarrow ans + cnt_{a_i\times a_j}\),如果 \(a_i\times a_j > a_{n-1}\),跳出循环并输出即可。
\(cnt_i\) 表示的是数组 \(a\) 中元素 \(i\) 的数量(前提是已经执行了 cnt = Counter(a))。
from collections import *
n = int(input())
ans = 0
a = []
for i in range(n) :
a.append(int(input()))
a.sort()
cnt = Counter(a)
for i in range(n):
for j in range(n):
ans += cnt[a[i] * a[j]]
if a[i] * a[j] > a[n - 1] : break
print(ans)

浙公网安备 33010602011771号