日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CF55D: Beautiful Number

發布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。