AtCoder题解
AtCoder Grand Contest 047
A. Integer Product
给定 \(n\) 个浮点数,计算有多少个 \((i, j)\) 使得 \(A_{i} \cdot A_{j}\) 是整数
\(2\leq N \leq 200 \ 000\) , $ 0 < A_{i} ^{4}$ , \(A_{i}\) 最多 \(9\) 为小数.
思路
通过题设条件缩小范围, 枚举
由于数据比较大,不能直接暴力做。判断是整数这个条件不太好集体维护。所以要找出题目中的特性,看看有没有机会让范围缩小。最好是可以 先考虑 \(A_{i} \cdot A_{j}\) 什么情况下是整数。发现,对于任意有限小数 \(x\), 可以在乘上 \(10^{n}\) 后肯定会变成整数。所以每个数必然是 \(k\cdot 2^{m}\cdot 5^{n}\) 的形式, 通过乘 \(10^{n}\) 把分母上的 \(2^{m}\cdot 5^{n}\) 约去. 而之前的 \(k\) 不影响答案。所以我们只要考虑 \(2^{m}\cdot 5^{n}\) 的数即可. 由于只有 \(9\) 位. 所以最多乘以 \(10^{9}\) ,也就是 \(m, n \geq -9\). 上限也不会很高。所以可以暴力枚举. 先用哈希表确定范围,然后在枚举哈希表中的数即可. 具体参见代码:
1 |
|
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.