标签:size 交通 cep turn new 管理局 lin def 统计
/*求n~m的幸运数 可以用solve(m)-solve(n-1); 这里定义dp[i][0]:长度为i,吉利数 dp[i][1]:长度为i,吉利数中以2结尾的数(因为62) dp[i][2]:长度为i,不吉利数 */ #include<iostream> #include<string.h> #include<algorithm> using namespace std; typedef long long ll; typedef unsigned long long ull; #define mod 1000000007 int n,m; int dp[8][3]; int bit[8]; void init() { //dp初始值 dp[0][0]=1; dp[0][1]=dp[0][2]=0; for(int i=1;i<=6;i++) { dp[i][0]=dp[i-1][0]*9-dp[i-1][1];//除去4和62 dp[i][1]=dp[i-1][0]; dp[i][2]=dp[i-1][2]*10+dp[i-1][1]+dp[i-1][0];//2加上6和4 } } int solve(int a) { int len=0; int tmp=a; while(a!=0) { bit[++len]=a%10; a/=10; } bit[len+1]=0;//防止越位 int ans=0; bool flag=false; /*一个位一个位判断 比如6254 首先从0~6000(即0到5999),6000~6200(即0到199)....*/ for(int i=len;i>=1;i--) { ans+=dp[i-1][2]*bit[i]; if(flag) ans+=dp[i-1][0]*bit[i]; if(!flag&&bit[i+1]==6&&bit[i]>2) ans+=dp[i][1]; if(!flag&&bit[i]>4) ans+=dp[i-1][0]; if(!flag&&bit[i]>6) ans+=dp[i-1][1]; if((bit[i+1]==6&&bit[i]==2)||bit[i]==4)flag=true; } if(flag)ans++; return tmp-ans; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); init(); while(cin>>n>>m) { if(n==0&&m==0) break; cout<<solve(m)-solve(n-1)<<endl; } return 0; }
标签:size 交通 cep turn new 管理局 lin def 统计
原文地址:https://www.cnblogs.com/zhgyki/p/9526394.html