码迷,mamicode.com
首页 > 其他好文 > 详细

2019年华南理工大学程序设计竞赛(春季赛)A NB群友

时间:2019-04-15 20:25:39      阅读:85      评论:0      收藏:0      [点我收藏+]

标签:搜索   https   状态   main   long   cli   clear   none   display   

https://ac.nowcoder.com/acm/contest/625/A

题意:给出一个区间范围 , 求有多少个数的每一位的积是在这个区间里面的

 

分析:没错了 ,就是记忆化暴力搜索 ,不断的枚举除 i ,i是2到9 , 看是否合法 ,  对于枚举到相同的状态的时候 , 后面的价值肯定和上一个状态是一样的 , 所以这样就好拉

技术图片
#include<bits/stdc++.h>

using namespace std;
#define ll long long
map<ll , ll >dp;
const int mod = 1e9 + 7;
ll dfs(ll x)
{
    if(x<1) return 0;
    if(dp[x]) return dp[x];
    ll ans=0;
    for(int i=2 ; i<=9 ; i++)
    {
        ll now=x/i;
        if(now>=1) ans++;
        ans+=dfs(now);///累记记忆化搜索的值
        ans%=mod;
    }
   return dp[x]=ans;
}

int main() {
   int t; scanf("%d",&t);

   while(t--)
   {
       ll l ,r;scanf("%lld%lld",&l,&r);
       dp.clear();
       ll sum1 = dfs(r);
       dp.clear();
       ll sum2 =dfs(l-1);
       printf("%lld\n",(sum1-sum2+mod)%mod);
   }
    return 0;
}
View Code

 

2019年华南理工大学程序设计竞赛(春季赛)A NB群友

标签:搜索   https   状态   main   long   cli   clear   none   display   

原文地址:https://www.cnblogs.com/shuaihui520/p/10712547.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!