HDU 2089 不要62

来源:互联网 发布:柴可夫斯基妻子知乎 编辑:程序博客网 时间:2024/06/05 02:07
详解(转载)
#include<stdio.h>#include<string.h>int dp[10][10];int solve(int x){int num[10];int tmp=x;int len=0;while(x){num[++len] = x%10;x/=10;}num[len+1]=0;int sum=0;int flag=0;for(int i=len;i>=1;i--){sum += dp[i-1][2] * num[i];if(flag)sum += dp[i-1][0] * num[i];if(!flag && num[i] > 4)sum += dp[i-1][0];if(!flag && num[i+1]==6 && num[i]>2)sum += dp[i][1];if(!flag && num[i] > 6 )sum += dp[i-1][1];if(num[i] == 4 || (num[i+1]==6 && num[i]==2))flag = 1;}return tmp-sum;}int main(){int n,m;memset(dp,0,sizeof(dp));dp[0][0]=1;for(int i=1;i<=6;i++){dp[i][0] = dp[i-1][0] * 9 - dp[i-1][1];dp[i][1] = dp[i-1][0];dp[i][2] = dp[i-1][2] * 10 + dp[i-1][0] + dp[i-1][1];}while(~scanf("%d%d",&n,&m)){if(n==0 && m==0)break;printf("%d\n",solve(m+1)-solve(n));}return 0;}


0 0
原创粉丝点击