Codeforces 55D 数位DP
来源:互联网 发布:lifemod软件下载 编辑:程序博客网 时间:2024/05/16 12:34
/*找出l到r内有多少个漂亮数漂亮数的定义是该数能被每个数位上的非零数字整除如250是漂亮数 250%2=250%5=0写出的bug1.注意返回dp值得调节是flag要为false2.下一个 状态的计算也错了。不应该写入是拆出的数位,应该是枚举的i*/#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>#include <iostream>#include <set>using namespace std;#define ll long longint gcd(int a,int b){return b==0?a:gcd(b,a%b);}int id[6666];int last=0;int get(int a,int b){ return a/gcd(a,b)*b;}ll dp[20][2520][66];int q[666];int tail=0;ll dfs(int now,int mod,int lcm,bool flag){ if(now<0) return mod%lcm ==0; if(!flag && dp[now][mod][id[lcm]] != -1) return dp[now][mod][id[lcm]]; int limit = flag?q[now]:9; ll num=0; for(int i=0;i<=limit;i++){ if(i!=0) num += dfs(now-1, (mod*10+i)%2520, get(lcm,i), flag&&(i==limit)); else num += dfs(now-1, mod*10%2520, lcm, flag&&(i==limit)); } if(!flag) dp[now][mod][id[lcm]] = num; return num;}ll W(ll x){ for(tail=0;x;x/=10){ q[tail++]=x%10; } return dfs(tail-1,0,1,true);}int main(){ //freopen("in.txt","r",stdin); memset(dp,-1,sizeof(dp)); int t; scanf("%d",&t); set<int > ss; for(int st=0;st<(1<<9);st++){ int LCM=1; for(int i=0;i<9;i++){ if(st&(1<<i)) LCM=get(LCM,i+1); } ss.insert(LCM); } for(int x : ss){ id[x] = last++; } while(t--){ ll l,r; scanf("%I64d%I64d",&l,&r); //cout<<W(r)<<endl; //cout<<W(l-1)<<endl; printf("%I64d\n",W(r) - W(l-1)); } return 0;}
0 0
- 【数位DP】 【CodeForces 55D】
- codeforces 55D 数位DP
- Codeforces 55D 数位DP
- Codeforces 55d 数位dp
- CodeForces 55D 数位DP
- Codeforces 55D Beautiful numbers 数位dp
- Codeforces 55D Beautiful numbers --- 数位DP
- Codeforces 55D Beautiful numbers 数位dp
- 【codeforces】55D. Beautiful numbers 数位DP
- 【数位DP】 codeforces 55D && FZU chriswho
- [CodeForces 55D] Beautiful numbers && 数位DP
- Codeforces 55D Beautiful numbers 数位DP
- 【数位DP】 Codeforces 55D Beautiful numbers
- codeforces 55D Beautiful numbers[数位dp]
- [Codeforces 55D]Beautiful numbers(数位DP)
- CodeForces 55D Beautiful numbers (数位DP)
- Codeforces 55D Beautiful numbers【数位dp】
- codeforces 55D. Beautiful numbers (数位dp)
- Codeforces 77C 树形DP
- Priest John's Busiest Day
- 第十章编程练习(7)
- Codeblosks用C++编写通用DLL供其他语言调用
- memset用法详解(转)
- Codeforces 55D 数位DP
- PAT_乙级1036
- js字符串方法(总结)
- 【URAL 刷题记】URAL 1028 ~ URAL 1035
- C#成神之路<13> C#对类的设计
- flush()
- Android Studio之提高编译的效率
- Android Material Design 详解(使用support v7兼容5.0以下系统(部分功能))
- Log4Net中配置文件的解释