[BZOJ3679]数字之积

本文详细介绍了BZOJ3679数字之积的解题思路,通过DFS预处理所有可能的乘积,并利用数位DP解决区间内满足条件的数的个数问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[BZOJ3679]数字之积

题目大意:

定义\(f(x)\)\(x\)各数位数字之积,求\([l,r)(l,r\le10^{18})\)中满足\(0<f(x)\le n(n\le10^9)\)的数的个数。

思路:

由于最终的乘积包含的质因子只可能有\(2,3,5,7\),因此最后乘积的数量十分有限。可以先使用一次DFS求出所有可能的乘积,然后再数位DP即可。

源代码:

#include<set>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
typedef long long int64;
inline int64 getint() {
    register char ch;
    while(!isdigit(ch=getchar()));
    register int64 x=ch^'0';
    while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
    return x;
}
typedef long long int64;
const int S=5195;
const int p[]={2,3,5,7};
int n,d[19],v[S];
std::set<int> set;
void dfs(const int &x) {
    if(set.count(x)) return;
    set.insert(x);
    for(register int i=0;i<4;i++) {
        if(1ll*x*p[i]<=n) {
            dfs(x*p[i]);
        }
    }
}
int64 f[19][S];
inline int find(const int &x) {
    return std::lower_bound(&v[1],&v[v[0]]+1,x)-v;
}
inline int64 dp(const int &dep,const int &zero,const int &limit,const int &s) {
    if(dep==0) return !zero;
    if(!zero&&!limit&&f[dep][s]!=-1) return f[dep][s];
    int64 ret=0;
    const int lim=limit?d[dep]:9;
    if(zero) {
        ret+=dp(dep-1,true,false,1);
    }
    for(register int i=1;i<=lim;i++) {
        if(1ll*v[s]*i>n) continue;
        ret+=dp(dep-1,false,limit&&i==lim,find(v[s]*i));
    }
    if(!zero&&!limit) f[dep][s]=ret;
    return ret;
}
inline int64 solve(int64 x) {
    for(d[0]=0;x;x/=10) d[++d[0]]=x%10;
    return dp(d[0],true,true,1);
}
int main() {
    n=getint();
    dfs(1);
    for(register std::set<int>::iterator i=set.begin();i!=set.end();i++) {
        v[++v[0]]=*i;
    }
    set.clear();
    const int64 l=getint()-1,r=getint()-1;
    memset(f,-1,sizeof f);
    printf("%lld\n",solve(r)-solve(l));
    return 0;
}

转载于:https://www.cnblogs.com/skylee03/p/9917064.html

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值