20pts WA求助 QAQ
查看原帖
20pts WA求助 QAQ
576378
creation_hy楼主2022/8/21 17:41

我看了一下题解好像有人也这么做的,求各位巨佬帮忙看看QAQ

#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int PrNum = 3245;
const int prime[PrNum] = {30000以内质数表(太长了不放了)};
int n, m1, m2, s, ans = INF;
struct node
{
    int x, cnt;
};
vector<node> m, t;
int f()
{
    int res = 0;
    for (int i = 0, j = 0; i < m.size() && j < t.size(); ++j)
    {
        if (t[j].x < m[i].x) // Next
            continue;
        if (t[j].x > m[i].x) // Havent
            return INF;
        res = max(res, (int)ceil(m[i].cnt / (t[j].cnt * 1.0))); // Can
        ++i; //Pass this
    }
    return res;
}
void Split(int x, vector<node> &vec)
{
    vec.clear();
    int cnt;
    for (int i = 0; i < PrNum && x > 1; i++)
    {
        cnt = 0;
        while (!(x % prime[i]) && x)
        {
            cnt++;
            x /= prime[i];
        }
        vec.push_back((node){prime[i], cnt});
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n >> m1 >> m2;
    Split(m1, m);
    for (int i = 0; i < m.size(); i++)
        m[i].cnt *= m2;
    while (n--)
    {
        cin >> s;
        Split(s, t);
        ans = min(ans, f());
    }
    cout << (ans == INF ? -1 : ans);
    return 0;
}
2022/8/21 17:41
加载中...