• 幸运的数字


    我今天已经水了好多题了

    请不要再催更了(QwQ)

    解析:

    一看就是打表数位dp啊。。。

    考虑到各个位上数字之和及数字的平方和不大,就先把范围内所有质数筛出来。

    然后就是数位dp的套路了。

    详见代码。

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    using namespace std;
    #define ll long long
    int t;
    ll x,y;
    ll f[20][200][1500];
    int prime[1500],tot;
    bool notprime[1500];
    int a[20];
    void get_prime(){
        notprime[0]=true;
        notprime[1]=true;
        for (int i=2;i<=1499;++i){
            if (!notprime[i]) prime[++tot]=i;
            for (int j=1;j<=tot&&i*prime[j]<=1499;++j){
                notprime[i*prime[j]]=true;
                if (i%prime[j]==0) break;
            }
        }
    }
    ll dfs(int pos,int limit,int sum,int squ){
        if (pos<=0) return ((!notprime[sum])&&(!notprime[squ]));
        if (!limit&&f[pos][sum][squ]!=-1) return f[pos][sum][squ];
        int lim=limit?a[pos]:9;
        ll res=0;
        for (int i=0;i<=lim;++i){
            res+=dfs(pos-1,limit&&(i==lim),sum+i,squ+i*i);
        }
        if (!limit) f[pos][sum][squ]=res;
        return res;
    }
    ll solve(ll xx){
        int len=0;
        while (xx){
            a[++len]=xx%10;
            xx/=10;
        }
        return dfs(len,1,0,0);
    }
    int main(){
        memset(f,-1,sizeof(f));
        get_prime();
        scanf("%d",&t);
        while (t--){
            scanf("%lld%lld",&x,&y);
            printf("%lld
    ",solve(y)-solve(x-1));
        }
        return 0;
    }
    

     学废了扣1.没学废扣眼珠子

    请大家

     

    小蒟蒻ΩωΩ I AK IOI.
  • 相关阅读:
    BestCoder Round #32
    USACO Runaround Numbers
    USACO Subset Sums
    USACO Sorting a Three-Valued Sequence
    USACO Ordered Fractions
    USACO 2.1 The Castle
    Codeforces Round #252 (Div. 2)
    Codeforces Round #292 (Div. 2)
    BZOJ 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居
    BZOJ 1603: [Usaco2008 Oct]打谷机
  • 原文地址:https://www.cnblogs.com/20070618hyz/p/13656212.html
Copyright © 2020-2023  润新知