zoukankan      html  css  js  c++  java
  • 水题(water)

    题目描述

    链接:https://ac.nowcoder.com/acm/contest/5203/E来源:牛客网

    img

    其中,f(1)=1;f(2)=1;Z皇后的方案数:即在Z×Z的棋盘上放置Z个皇后,使其互不攻击的方案数。

    输入描述:

    输入数据共一行,两个正整数x,m,意义如“题目描述”。
    

    输出描述:

    一个正整数k,表示输出结尾0 的个数或者放置皇后的方案数
    

    示例1

    输入

    [复制]

    375 16
    

    输出

    [复制]

    14200
    

    说明

       鸣谢真·dalao  Tyxao
    

    思路:

    (一道套娃题

    首先这个公式,大表可以发现是一个斐波那契数列,先打表判断判断x是否存在数列中。

    如果存在,需要求(x!)(m)进制下末尾0的数量,我们知道求(x!)在10进制下末尾0的数量就是统计n!下2和5因子的个数,这个数量的min就是末尾0的个数,因为(2^1*5^1=10)是10的分解质因子得到的。先对m分解质因子,再对x的阶乘分解质因子求这些质因子的个数,最后统计这些因子可以凑出来最多几个m,就是答案。

    如果不存在跑一个z皇后,z≤13。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    LL f[90];
    map<LL,bool> mmp;
    int fac[110],s[110],z,ans;
    int st[20],pos[20];
    void dfs(int u){
        if(u==z) {
            ans++;
            return ;
        }
        for(int i=0;i<z;++i){
            pos[u]=i;
            bool flag=1;
            for(int j=0;j<u;++j){
                if(pos[j]==i||i-u==pos[j]-j||i+u==pos[j]+j){
                    flag=0;
                }
            }
            if(flag){
                dfs(u+1);
            }
        }
    }
    int main(){
        f[1]=1,f[2]=1;
        for(int i=3;i<90;++i){
            f[i]=f[i-1]+f[i-2];
            mmp[f[i]]=1;
        }
        LL x,m;
        cin>>x>>m;
        if(mmp[x]){
            int cnt=0;
            for(int i=2;i<=m/i;++i){
                if(m%i==0){
                    fac[++cnt]=i;
                    while(m%i==0){
                        s[cnt]++;
                        m/=i;
                    }
                }
            }
            if(m>1) fac[++cnt]=m,s[cnt]=1;
            LL ans=2e18;
            for(int i=1;i<=cnt;++i){
                LL ss=0,tx=x;
                while(tx){
                    ss+=tx/fac[i];
                    tx/=fac[i];
                }
                ans=min(ans,ss/s[i]);
            }
            cout<<ans<<endl;
        }
        else {
            z=x%min(13LL,m)+1;
            dfs(0);
            cout<<ans<<endl;
        }
          
        return 0;
    }
    
  • 相关阅读:
    html的一些基本属性介绍
    html的一些基本语法学习与实战
    getline()和get()的使用区别
    浅谈JS执行环境及作用域
    vue的第一个commit分析
    移动端适配-rem(新)
    电商类业务梳理
    不同类型的状态码及含义
    TCP/IP简记
    前端性能优化小结(持续更新)
  • 原文地址:https://www.cnblogs.com/jjl0229/p/12843602.html
Copyright © 2011-2022 走看看