agc047_a A - Integer Product 数学 想法

https://atcoder.jp/contests/agc047/tasks/agc047_a

题意

输入n个最多9位小数的浮点数,计算有多少对数乘积恰好是“整数”。

思路

其实就是看每个数2和5的因子个数,加起来大于分母即可。
可以对所有数按照2和5的因子计数,这样规模会很小(不到15*15)
暴力for即可。

代码

void solve(int kaseId = -1) {
    int n;
    cin >> n;
    map<pair<int, int>, int> cnt;
    for (int i = 1; i <= n; ++i) {
        long double ai;
        cin >> ai;
        ll val = (ll) (ai * 1000000000.0 + 0.5);
        ll cnt2 = 0;
        ll cnt5 = 0;
        while (val % 2 == 0) {
            cnt2++;
            val /= 2;
        }
        while (val % 5 == 0) {
            cnt5++;
            val /= 5;
        }
        cnt[make_pair(cnt2, cnt5)]++;
    }

    ll ans = 0;
    for (const auto &pi: cnt) {
        for (const auto &pj: cnt) {
            if (pi.first.first + pj.first.first >= 18 &&
                pi.first.second + pj.first.second >= 18) {
                if (pi == pj) {
                    ans += pi.second * (pi.second - 1ll);
                } else {
                    ans += pi.second * 1ll * pj.second;
                }
            }
        }
    }
//    debug(cnt);
    cout << ans / 2 << endl;
}

后记

原来签到题都这么难啊。打扰了。

你可能感兴趣的:(想法,数学,算法)