zoukankan      html  css  js  c++  java
  • 洛谷

    https://www.luogu.org/problemnew/show/P1414

    以后这种gcd的还是尽可能往分解那里想一下。

    先把每个数分解,他的所有因子都会cnt+1。

    然后从最大的可能因子开始往下走,每次把比这个cnt小或等的ans全部更新。

    这样明显会超,但是很多更新是没必要的,因为我们是从最大的开始枚举的,所以更新完之后没有人可以再更新他们了。

    所以复杂度是每个数求因数分解,大概是1e7,然后扫一次因子也只扫一次ans,忽略不计。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    
    int n;
    int a[10005];
    
    int d[1000005];
    
    int ans[10005];
    void fj(int n){
        for(int i=1;i<=1000;i++){
            if(i*i>n)
                break;
            if(n%i==0){
                d[i]++;
                if(i*i!=n)
                    d[n/i]++;
            }
        }
    }
    
    int main() {
    #ifdef Yinku
        freopen("Yinku.in","r",stdin);
    #endif // Yinku
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
            fj(a[i]);
        }
    
        int lowbound=0;
        for(int di=1000000;di>=1;di--){
            for(int i=d[di];i>lowbound;i--){
                ans[i]=di;
            }
            lowbound=max(lowbound,d[di]);
        }
    
        for(int k=1;k<=n;k++){
             printf("%d
    ",ans[k]);
        }
    
        return 0;
    }
    
  • 相关阅读:
    其他标签
    数组和全局变量
    字符串处理
    运算符
    PHP安装配置工具
    String、StringBuffer与StringBuilder之间区别
    mybits——1
    异常
    ubuntu 系统错误:Error : BrokenCount > 0解决
    ubuntu配置VScode
  • 原文地址:https://www.cnblogs.com/Yinku/p/11013689.html
Copyright © 2011-2022 走看看