zoukankan      html  css  js  c++  java
  • 【GYM102091】2018-2019 ACM-ICPC, Asia Nakhon Pathom Regional Contest F

    题意:给一个n求前n行帕斯卡三角中有几个7的倍数。

    这玩意其实可以出到任意模数,我们考虑使用Lucas定理,那么C(n,m)=∏C(ni,mi),其中ni,mi为n,m,7进制展开下的数字。不合法方案就是任意ni>=mi的,数位dp硬搞一波。

    #include<bits/stdc++.h>
    #pragma GCC optimize(3,"Ofast","inline")
    using namespace std;
    const int mod =1e9+7;
    int dp[2][23];
    int bit[23],m;
    const int inv=(mod-1)/2+1;
    int DP(int pos,bool lim){
        if(pos==m)return 1;
        int& ret=dp[lim][pos];
        if(ret)
            return ret;
        int up=6;
        if(!lim){
            up=bit[pos];
            ret+=1ll*(up+1)*DP(pos+1,lim)%mod;
            up--; 
        }
        if(up>=0){
            ret+=1ll*(up+2)*(up+1)*(1ll*inv*DP(pos+1,1)%mod)%mod;
        }
        ret%=mod;
        return ret;
    }
    int main()
    {
        long long n;
        int t;
        cin>>t;
        for(int i=1;i<=t;i++){
            m=0;
            cin>>n;
            long long tn=n%mod;
            int ans=(tn*(tn+1)%mod*inv%mod+tn+1)%mod;
            while(n){
                bit[m++]=n%7;
                n/=7;
            }
            reverse(bit,bit+m);
            for(int i=0;i<=m;i++){
                dp[0][i]=0;
                dp[1][i]=0;
            }
            printf("Case %d: %d
    ",i,(ans-DP(0,0)+mod)%mod);
        }
    }

    人傻常数大,大哥们可以改成非递归的

  • 相关阅读:
    资产置换
    《CSS3使用指南》读书笔记
    foxtable使用笔记
    Java语法糖
    IO笔记
    HttpClient使用笔记
    正则表达式之?(问号)的使用
    关于HTML代码的转义
    《大数据时代》读书笔记
    《自己动手写网络爬虫》读书笔记
  • 原文地址:https://www.cnblogs.com/hugin/p/11635802.html
Copyright © 2011-2022 走看看