[FOJ 1896] 神奇的魔法数

来源:互联网 发布:mysql看不到workbench 编辑:程序博客网 时间:2024/05/01 05:58

题目描述

神奇的魔法数

解题思路

参考代码

#include <stdio.h>#include <string.h>#include <math.h>typedef long long ll;int m, dp[15][10];void init(){    memset(dp,0,sizeof(dp));    for (int i = 0; i < 10; i++)    dp[1][i] = 1;    for (int i = 2; i < 12; i++)        for (int j = 0; j < 10; j++)            for (int k = 0; k < 10; k++)                if (fabs(j-k) >= m) dp[i][j] += dp[i-1][k];}ll Cal(ll x){    int arr[15]={0},cnt = 0;    while (x){        arr[++cnt] = (x%10);        x /= 10;    }    ll ans = 0;    for (int i = 1;i < cnt;i++)        for (int j = 1;j < 10;j++)  ans += dp[i][j];    for (int i = 1;i < arr[cnt];i++)    ans += dp[cnt][i];    for (int i = cnt-1;i > 0;i--){        for (int j = 0;j < arr[i];j++)            if (fabs(j-arr[i+1]) >= m)  ans += dp[i][j];        if (fabs(arr[i]-arr[i+1]) < m)  break;    }    return ans;}int main(){    int T;    scanf("%d",&T);    while (T--){        ll a,b;        scanf("%I64d %I64d %d",&a,&b,&m);        init();        printf("%I64d\n",Cal(b+1)-Cal(a));    }    return 0;}
0 0
原创粉丝点击