【LOJ10166】數字遊戲
阿新 • • 發佈:2018-12-12
題目描述
由於科協裡最近真的很流行數字遊戲,某人又命名了一種取模數,這種數字必須滿足各位數字之和 mod N\bmod NmodN 為 000。現在大家又要玩遊戲了,指定一個整數閉區間 [a,b][a,b][a,b],問這個區間內有多少個取模數。
輸入格式
題目有多組測試資料。每組只含三個數字 a,b,Na, b, Na,b,N。
輸出格式
對於每個測試資料輸出一行,表示各位數字和 mod N\bmod NmodN 為 000 的數的個數。
樣例
樣例輸入
1 19 9
樣例輸出
2
資料範圍與提示
對於全部資料,
解析: 還是裸得不能再裸的數位DP。
程式碼:
#include <bits/stdc++.h> using namespace std; const int Max=12; int n,m,l,r,f[Max][110][2]; char ch[Max]; inline int dfs(int pos,int sum,int limit) { if(pos==n+1) return !sum ? 1 : 0; if(~f[pos][sum][limit]) return f[pos][sum][limit]; int mx=limit?ch[pos]-'0':9,ans=0; for(int i=0;i<=mx;i++) ans+=dfs(pos+1,(sum+i)%m,limit&(i==mx)); return f[pos][sum][limit]=ans; } inline int solve(int num) { memset(f,-1,sizeof(f)); sprintf(ch+1,"%d",num),n=strlen(ch+1); return dfs(1,0,1); } int main() { while(cin>>l>>r>>m) cout<<solve(r)-solve(l-1)<<"\n"; return 0; }