Atcoder abc339

https://atcoder.jp/contests/abc339

F - Product Equality

n个数字a[n], 问有多少个有序对(i,j,k)满足

A[i]*A[j]=A[k]

n 1000

$a[i] \in [0,10^{10}]$

2s

1024mb

我的思路

光是 枚举 (i,j) 那么也是 n^2了,那么乘法和对比就要足够快, 然而最快的就算ntt,也是 (长度 log(长度)) 会tle

一个想法 是 通过减少比较范围,但如果正好 一半长度 [len/2] 一半长度[len]

第二个想法是 选取一些 质数p,然后通过类似hash的想法来完成

a[i] * a[j] == a[k]

那么 (a[i] % p)*(a[j] % p) % p== a[k] %p

没有任何确定性算法

然后就是 十进制压8位,但这样也只是降低到 int[125] x int[125]

n的个数没有减少

题解

好家伙, 真的就随机20个数, 然后 就mod校验

代码

总结

F: 卡蓝题了,我吐了

但这种基于“概率”感觉的方法,总给我数学上的不适感。哎