• 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;
    }
  • 相关阅读:
    strutsconfig.xml中action、forward、formbean属性含义
    略谈如何从工作线程中弹出对话框
    SSO(Single Signon) in Action
    深入浅出JBoss Seam
    以ListBox为例谈谈控件里字符串的对齐办法
    Asp.Net性能优化
    vc动态生成按钮并响应 .
    Web开发中的弹出对话框控件介绍
    ASP.NET MVC3学习心得视图和模型
    vc采集网页内frame框架下所有元素(不指定具体table/form) .
  • 原文地址:https://www.cnblogs.com/widsom/p/8343563.html
Copyright © 2020-2023  润新知