zoukankan      html  css  js  c++  java
  • Codeforces 448E

    448E - Divisors

    思路:

    dfs。注意如果是1,直接返回,因为1的因子还是1。

    因为x因子的因子还是x的因子,所以可以事先处理好x因子的因子在x因子中的位置。

    不用这个方法也可以,用map映射vector保存因子的因子。

    代码1:

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define pb push_back
    #define mem memset(a,b,sizeof(a))
    
    const int N=1e6+5;
    vector<int>son[N];
    vector<ll>t;
    ll x;
    int cnt=0;
    void dfs(ll k,ll n){
        if(cnt==1e5)return ;
        if(n==0){
            cout<<1<<' ';
            cnt++;
            return ;
        }
        if(k==0){
            cout<<t[n]<<' ';
            cnt++;
            return ;
        }else{
            for(int i=0;i<son[n].size();i++){
                dfs(k-1,son[n][i]);
                if(cnt==1e5)return;
            }
        }
    }
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(0);
        ll k;
        cin>>x>>k;
        for(ll i=1;i*i<=x;i++){
            if(x%i==0){
                if(i*i==x)t.pb(i);
                else t.pb(i),t.pb(x/i);
            }
        }
        sort(t.begin(),t.end());
        for(int i=0;i<t.size();i++){
            for(int j=0;j<=i;j++)
                if(t[i]%t[j]==0)son[i].pb(j);
        }
        dfs(k,t.size()-1);
        return 0;
    }

    代码2:

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define pb push_back
    #define mem memset(a,b,sizeof(a))
    
    vector<ll>t;
    unordered_map<ll,vector<ll>>vc;
    ll x;
    int cnt=0;
    void dfs(ll k,ll n){
        if(cnt==1e5)return ;
        if(n==1){
            cout<<1<<' ';
            cnt++;
            return ;
        }
        if(k==0){
            cout<<n<<' ';
            cnt++;
            return ;
        }
        else{
            if(n==x){
                for(int i=0;i<t.size();i++){
                    dfs(k-1,t[i]);
                }
            }else{
                if(vc.find(n)!=vc.end()){
                    for(auto x:vc[n]){
                        dfs(k-1,x);
                        if(cnt==1e5)return ;
                    }
                }else{
                    for(ll i=1;i*i<=n;i++){
                        if(n%i==0){
                            if(i*i==n)vc[n].pb(i);
                            else vc[n].pb(i),vc[n].pb(n/i);
                        }
                    }
                    sort(vc[n].begin(),vc[n].end());
                    for(auto x:vc[n]){
                        dfs(k-1,x);
                        if(cnt==1e5)return ;
                    }
                }
            }
        }
    }
    int main(){
        ios::sync_with_stdio(false);
        cin.tie(0);
        ll k;
        cin>>x>>k;
        for(ll i=1;i*i<=x;i++){
            if(x%i==0){
                if(i*i==x)t.pb(i);
                else t.pb(i),t.pb(x/i);
            }
        }
        sort(t.begin(),t.end());
        if(k==0)cout<<x<<endl;
        else if(k>=1e5){
            if(x==1)cout<<1<<endl;
            else{
                for(int i=1;i<=1e5;i++)cout<<1<<' ';
                cout<<endl;
            }
        }
        else dfs(k,x);
        return 0;
    }
  • 相关阅读:
    JS弹出下载对话框以及实现常见文件类型的下载
    什么是物理像素、虚拟像素、逻辑像素、设备像素,什么又是 PPI, DPI, DPR 和 DIP
    学会git玩转github,结尾有惊喜!有惊喜!有惊喜!
    Menu实现逻辑
    控件保持多种绘图状态的做法
    2个函数宏技巧
    绘图 Painter转接口封装的方式
    DirectUI消息循环的简单封装
    c++以代理的方式来实现接口化编程
    c++对象工厂
  • 原文地址:https://www.cnblogs.com/widsom/p/8343563.html
Copyright © 2011-2022 走看看