zoukankan      html  css  js  c++  java
  • [NOIP 2009] 细胞*(选做)

    思路

    这题其实很容易想到质因子分解,但是我们只能分解m1^m2的质因子,不能把每个读入的s全部分解开。

    对于s来说,只要它的质因子种类包括了所有的m1^m2的质因子种类,这个s就一定可以求出来一个时间,让他们的对应的指数相除取最大,因为初始的时候指数为0,所以用除法。

    s只需要分解m1^m2的质因子就可以了,这样速度就上去了。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    typedef long long ll;
    const int maxn=3e5+10;
    const int INF=0x3f3f3f3f;
    unordered_map<ll,ll> a,b;
    
    int main()
    {
        ll n,m1,m2,t;
        scanf("%lld%lld%lld",&n,&m1,&m2);
        if (m1==1) {
            ll t;
            for (int i=0;i<n;i++) {
                scanf("%lld",&t);
            }
            printf("0
    ");
            return 0;
        }
        ll i=2;
        while (m1!=1) {
            while (m1%i==0) {
                a[i]++;
                m1/=i;
            }
            if (a.find(i)!=a.end())
                a[i]*=m2;
            i++;
        }
        ll ans=INF;
        for (int i=0;i<n;i++) {
            scanf("%lld",&t);
            ll ps=-INF;
            bool flag=true;
            for (auto p:a) {
                if (t%p.first!=0) {
                    flag=false;
                    break;
                }
                ll cnt=0;
                while (t%p.first==0) {
                    cnt++;
                    t/=p.first;
                }
                if (p.second>=cnt) {
                    ll div=p.second/cnt;
                    if (cnt*div<p.second)
                        div++;
                    ps=max(ps,div);
                }
                else {
                    ps=max(ps,1LL);
                }
            }
            if (flag) {
                ans=min(ans,ps);
            }
        }
        if (ans==INF||ans==-INF) {
            printf("-1
    ");
        }
        else {
            printf("%lld
    ",ans);
        }
        return 0;
    }
    /*
    100
    12125 1
    39703 1 5 53645 457192049 45953 15679 97 1 1 5 5581 324355 84685 41539 5 485 1 97 485 1 339035 97 25 79657 1 1 361519 97 1 1 1 1 97 270533 3780769 1 182795 1 5 16865 68539 3469 1 97 5 1 1 5 26729 97 1 1 247654289 5 1 1 1 97 485 1 97 1 97 1 1 25 36887 99277 5 1 138025 10859635 97 50423 5 18397 1 5 1 836819 84067 607219735 46337 1 97 97 71257 1 97 95803 1 21859 57895 1 1 1 1 25247 1
    */
    
  • 相关阅读:
    计算机网络第一章_20210512
    bootloader_华清远见
    C#3.17
    linux--cd命令
    国内的开源网站
    安装linux
    如何自我介绍
    课堂破冰游戏“猜猜他是谁”
    办公软件---word
    计算机网络--技能训练
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/12404454.html
Copyright © 2011-2022 走看看