CF55D: Beautiful Number
生活随笔
收集整理的這篇文章主要介紹了
CF55D: Beautiful Number
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
傳送門
一句話題意
求 l~r 之間有多少個數能整除自己各位上的數(排除 0 )
分析
然后我們一看就知道數位 dp ,但是狀態很難設計啊 QWQ
我們可以發現所有數位的 lcm 最大為 2520 (就是 1~ 9 的 lcm 嘛)
然后我們再看就能發現某個數模 2520 下如果能整除 它所有數位的 lcm 那么它就是滿足條件的數
也就是說 一個數模其所有數位的 lcm 的結果 和 模 2520 后再去模這個 lcm 的結果 是相同的
為什么?什么為什么,因為一個數所有數位的 lcm 必然是 2520 的因子啊
那么我們考慮令 f[i][j][k] 表示還剩 i 位沒有處理,當前的數模 2520 為 j,當前所有數位的 lcm 為 k 的方案數,這樣狀態就設計出來了
然后就是代碼了:(由于一開始不會抄的題解,所以寫的是 dfs ,經過一個小時的奮斗終于寫好了非 dfs 版的,就放上來了 QVQ )
//by Judge #include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #define fp(i,a,b) for(int i=(a),I=(b)+1;i<I;++i) #define fd(i,a,b) for(int i=(a),I=(b)-1;i>I;--i) #define ll long long using namespace std; const int mod=2520; #ifndef Judge #define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++) #endif char buf[1<<21],*p1=buf,*p2=buf; inline ll read(){ ll x=0,f=1; char c=getchar();for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f; } char sr[1<<21],z[20];int C=-1,Z; inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;} inline void print(ll x,char chr='\n'){if(C>1<<20)Ot();if(x<0)sr[++C]=45,x=-x;while(z[++Z]=x%10+48,x/=10);while(sr[++C]=z[Z],--Z);sr[++C]=chr; } int tot,id[mod+50],val[50],d[21]; ll f[20][mod+3][50]; int GCD(int a,int b) { return b?GCD(b,a%b):a; } int LCM(int a,int b) { return a/GCD(a,b)*b; } void prep() {fp(i,1,mod) if(!(mod%i)) id[i]=++tot,val[tot]=i;fp(i,1,tot) fp(j,0,mod/val[i]) f[0][val[i]*j][i]=1;fp(i,1,19) fp(j,0,mod) fp(k,1,tot) fp(d,0,9)f[i][j][k]+=f[i-1][(j*10+d)%mod][id[d?LCM(val[k],d):val[k]]]; } inline ll solv(ll x){int len=0; ll ans=0,Val=0,Lcm=1;for(;x;x/=10) d[++len]=x%10;fd(i,len,1){fp(j,0,d[i]-1) ans+=f[i-1][(Val*10+j)%mod][id[j?LCM(Lcm,j):Lcm]];Val=(Val*10+d[i])%mod,Lcm=d[i]?LCM(Lcm,d[i]):Lcm;} return ans+!(Val%Lcm); } int main(){ prep(); ll T=read(),l,r;fp(kkk,1,T) l=read(),r=read(),print(solv(r)-solv(l-1));return Ot(),0; }轉載于:https://www.cnblogs.com/Judge/p/10548348.html
總結
以上是生活随笔為你收集整理的CF55D: Beautiful Number的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程学习必备的一些网站,干货收藏!
- 下一篇: 关于“进程”与“线程”的最通俗解析