• dfs:水题-DFS-牛客+集合中的质数-(容斥+dfs)-牛客


    水题-DFS-牛客

    解:斐波那契数的另一种表述,暴力做,好像不用DFS;

    1,斐波那契数,递推

    2,皇后数打表

    3,进制转换

    代码:

    #include<bits/stdc++.h>
    /*#include<iostream>
    #include<string>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<iomanip>
    #include<queue>
    #include<cstring>*/
    using namespace std;
    const int maxn=100;
    const int mod=19260817;
    const int inf=0x3f3f3f3f;
    typedef long long ll;
    typedef pair<int,int> pii;
    const int N=5e5+10;
    
    ll x;
    int m;
    int ans[]={0,1,0,0,2,10,4,40,92,352,724,2680,14200,73712};
    ll f[maxn];
    
    void solve()
    {
        ll res=1e18;
        for(int i=2; i<=m; i++)
        {
            int cnt=0;
            while(m%i==0)
            {
                cnt++;
                m/=i;
            }
            if(cnt)
            {
                ll n=x,sum=0;
                while(n)
                {
                    sum+=n/i;
                    n/=i;
                }
                res=min(res,sum/cnt);
            }
        }
        cout<<res<<endl;
    }
    int main()
    {
        cin>>x>>m;
        f[1]=f[2]=1;
        for(int i=3; i<maxn; i++)
         f[i]=f[i-1]+f[i-2];
        int flag=0;
        for(int i=1; i<maxn; i++)
        {
            if(x==f[i])
             {
                 flag=1;
                 solve();
                 break;
             }
        }
        int z=x%min(13,m)+1;
        if(!flag)
          cout<<ans[z]<<endl;;
        system("pause");
        return 0;
    }

    n的阶乘在m进制下末尾0的个数

    集合中的质数-(容斥+dfs)-牛客

    题意:给出一个集合和一个数m。

    集合里面有n个质数。

    请你求出从 1 到 m 的所有数中,至少能被集合中的一个数整除的数的个数。

    解:容斥,搜索一下

    代码:

    #include<bits/stdc++.h>
    
    using namespace std;
    const int maxn=1e5+10;
    const int mod=19260817;
    const int inf=0x3f3f3f3f;
    typedef long long ll;
    typedef pair<int,int> pii;
    const int N=5e5+10;
    
    int n,m;
    ll a[30];
    ll ans;
    
    void dfs(ll step,ll state,ll cnt)
    {
        if(step==n)
        {
            if(!cnt) return ;
            else{//容斥
                if(cnt&1) ans+=m/state;
                else  ans-=m/state;   
            }
            return ;
        }
    
        dfs(step+1,state*a[step+1],cnt+1);//
    
        dfs(step+1,state,cnt);//不选
        return ;
    }
    int main()
    {
        cin>>n>>m;
        for(int i=1; i<=n; i++) cin>>a[i];
        dfs(0,1,0);
        cout<<ans<<endl;
        system("pause");
        return 0;
    }

    领:

    #include<bits/stdc++.h>
    
    using namespace std;
    const int maxn=1e5+10;
    const int mod=19260817;
    const int inf=0x3f3f3f3f;
    typedef long long ll;
    typedef pair<int,int> pii;
    const int N=5e5+10;
    
    int n,m;
    ll a[30];
    ll ans;
    
    void dfs(int p, int f, ll cur) 
    {//递归枚举除数
        if (p == n) return;//如果递归到头了
        if (cur * a[p] <= m) 
        {//如果还可以继续下去
            ans += m / (a[p] * cur) * f;
            dfs(p + 1, -f, cur * a[p]);
            dfs(p + 1, f, cur);
        }
    }
    int main() {
        cin >> n >> m;
        for (int i = 0; i < n; i++) cin >> a[i];
        sort(a, a + n);//排序,优先选择小的
        dfs(0, 1, 1);
        cout << ans << endl;
        return 0;
    }
  • 相关阅读:
    Intellij Idea 2017创建web项目及tomcat部署实战
    使用docker安装mysql服务
    python2--升级python3
    SpringCloud--注册中心Eureka
    SpringBoot--属性加载顺序
    Jmeter--压测dubbo接口
    较快的maven的settings.xml文件
    Spring boot:logback文件配置
    Spring--AOP
    34组代码敲不队记账类app会议纪要
  • 原文地址:https://www.cnblogs.com/sweetlittlebaby/p/13460634.html
Copyright © 2020-2023  润新知