【Atcoder hbpc C 183】1=0.999...

Atcoder hbpc C

题意:给n个循环小数或者有限小数,问其中有多少个互不相同的。

思路:我的思路比较繁琐。

首先我们考虑分数化小数:假设原来的数是\(a.b(c)\),那么这个分数就是\(a+\frac{b}{10^{len_b}}+\frac{c}{10^{len_b}\times (10^{len_c}-1)}\)

所以用4哈希判一下两个是否相同,需要注意我们的哈希模数必须都要取质数,因为需要取\(10^{\dots}\)\(10^{\dots}-1\)的逆元。

这里我取的是\({19260817,998244353,1000000007,1000000009}\)

再用并查集看等价类的个数即可。(这里其实用一个\(set\)存一下所有哈希值就可以了。。。

其实还有一种更简单的思路:

我们直接将循环节重复几次,直到长度大于等于\(600\)为止。

然后我们将\(0.999...\)改成\(1.0\),所有的直接进行排序,比较,然后就完了。。。

猜你喜欢

转载自www.cnblogs.com/denverjin/p/10629716.html