ZUFE OJ 2288 God Wang I

Description

God Wang 是ZUFE的神犇,有一天他想到一种神奇的变换,并且将它命名为GodW变换

对于一个数字n,该变换后的值GodW(n)为,先令X=n

第一步,如果X为个位数,GodW(n)=X,否则执行第二步;

第二步,X的奇数位置的数字之和为a,偶数位置的和为b, X=a*b, 执行第一步;

现在我们有T个询问,对于每个询问输入三个整数数l,r,x

对于每个询问请输出在[l,r]这个闭区间里的数经过该变换后为x的数有多少个

Input

第一行是一个T,表示有T组询问(T<=1000)

接下来T行,每行三个整数l,r,x (0<=l<=r<=1000000)

Output

输出T行,每行一个整数,代表着答案。

Sample Input

2
1 10 2
20 25 0

Sample Output

1
2

HINT

第二个样例中满足条件的值分别为20和25

 

打表!

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
 
const int Maxn=1000000+10;
int L,R,X;
int a[Maxn][15];
int D[Maxn];
int u[Maxn],tot;
 
int F(int x)
{
    tot=0;
    int sum1=0,sum2=0;
    while(x)
    {
        u[tot]=x%10;
        x=x/10;
        tot++;
    }
    for(int i=0;i<tot;i++)
    {
        if(i%2==1) sum1=sum1+u[i];
        else sum2=sum2+u[i];
    }
    return sum1*sum2;
}
 
int main()
{
    int T;
    memset(a,0,sizeof(a));
    for(int i=0;i<=9;i++) D[i]=i;
    a[0][0]=1;
 
    for(int i=1;i<=9;i++)
    {
        for(int j=0;j<=9;j++) a[i][j]=a[i-1][j];
        a[i][i]++;
    }
 
    for(int i=10;i<=1000000;i++)
    {
        for(int j=0;j<=9;j++)  a[i][j]=a[i-1][j];
        a[i][D[F(i)]]++;
        D[i]=D[F(i)];
    }
 
    while(~scanf("%d",&T))
    {
        while(T--)
        {
            scanf("%d%d%d",&L,&R,&X);
            if(X<0||X>9)  printf("0\n");
            else
            {
                if(L!=0)
                    printf("%d\n",a[R][X]-a[L-1][X]);
                else
                    printf("%d\n",a[R][X]);
            }
        }
    }
    return 0;
}

 

posted @ 2015-08-15 16:50  Fighting_Heart  阅读(269)  评论(0编辑  收藏  举报