完美数
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 128000/64000 KB (Java/Others)
Problem Description
8是中国人很喜欢的一个数字,但是如果有3的存在就变成了38。。。就不是很好了。。 你能告诉我,在[L , R] 的正整数区间内,要么包含3 要么包含 8 的不同的整数有多少个么?
Input
第一行一个整数T(<=10000),代表数据的组数。 对于每组数据给两个整数 L , R (1 <= L <= R <= 1e9)。
Output
对于每组数据,给一个整数为答案。
Sample Input
3 1 100 1 3 8 8
Sample Output
34 11
#include <stdio.h> #include <string.h> int dp[11][11][11]; int l,r,t; int num[11],len; inline int dfs(int i,int _3,int _8,bool e){ if(i==-1) return (_3+_8)==1; if(!e && dp[i][_3][_8]!=-1) return dp[i][_3][_8]; int v=(e?num[i]:9); int ans=0; for(int j=0;j<=v;j++){ ans+=dfs(i-1,_3|(j==3),_8|(j==8),e&&(j==v)); } if(!e) dp[i][_3][_8]=ans; return ans; } inline int solve(int n){ len=0; while(n){ num[len++]=n%10; n/=10; } return dfs(len-1,0,0,1); } int main(){ memset(dp,-1,sizeof dp); scanf("%d",&t); while(t--){ scanf("%d%d",&l,&r); printf("%d\n",solve(r)-solve(l-1)); } return 0; }