SPOJ RAONE(数位dp)



RAONE - Ra-One Numbers

no tags 

In the War between good and evil . Ra-One is on the evil side and G-One on the good side.

Ra-One is fond of destroying cities and its G-one's duty to protect them..

 

Ra-One loves to destroy cities whose Zip Code has special properties. He says he loves to destroy cities which have Ra-One numbers as their ZIp Code.

Any number is Ra-one if the Difference between Sum of digits at even location and Sum of digits at odd location is One (1).. For eg... for 234563 is Ra-One number

digits at odd location are 3,5,3 (unit place is location 1 )

digits at even location are 2,4,6

Diff = (2+4+6)-(3+5+3)=12-11 = 1.

And 123456 is not Ra-One number

diff = (5+3+1) - (2+4+6) = -4

 

G-One knows this about Ra-one and wants to deploy his Army members in those cities. 1 army member will be deployed in each city.

G-one knows the range of ZIP-Codes where Ra-One might attack & needs your help to find out how many army members he needs.

Can you help Him ?

Input

first line will have only one integer 't' number of Zip-Code ranges. it is followed by t lines

each line from 2nd line cotains 2 integer 'from'  and 'to'. these indicate the range of Zip codes where Ra-one might attack .(from and to are included in the range)

Output

A single number for each test case telling how many army members G-One needs to deploy.

each number should be on separate lines

Example

Input:
2
1 10
10 100


 Output:
1
9
explanation:
for 1st test case the only number is 10
for 2nd test case numbers are 10,21,32,43,54,65,76,87,98

NOTE:
t will be less than 100
from and to will be between 0 and 10^8 inclusive

链接:http://www.spoj.com/problems/RAONE/en/
题意:求一个区间 偶数位置减去奇数位置的差为一的数的个数

思路:数位dp


#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<set>
#include<map>

#define L(x) (x<<1)
#define R(x) (x<<1|1)
#define MID(x,y) ((x+y)>>1)

#define bug printf("hihi\n")

#define eps 1e-8

using namespace std;


#define INF 0x3f3f3f3f
#define N  100

int dp[10][100][100];
int bit[20];

int dfs(int pos,int le,int ri,bool bound)
{
    if(pos==0) return ri-le==1 ? 1:0;
    if(!bound&&dp[pos][le][ri]>=0) return dp[pos][le][ri];
    int up=bound ? bit[pos]:9;
    int ans=0;
    for(int i=0;i<=up;i++)
    {
        if(pos&1)
            ans+=dfs(pos-1,le+i,ri,bound&&i==up);
        else
            ans+=dfs(pos-1,le,ri+i,bound&&i==up);
    }
    if(!bound) dp[pos][le][ri]=ans;
    return ans;
}

int solve(int x)
{
    int i,j;
    int len=0;
    while(x)
    {
        bit[++len]=x%10;
        x/=10;
    }
    return dfs(len,0,0,true);
}

int main()
{
   int i,j;
   memset(dp,-1,sizeof(dp));
   int t;
   scanf("%d",&t);
   int le,ri;
   while(t--)
   {
       scanf("%d%d",&le,&ri);
       printf("%d\n",solve(ri)-solve(le-1));
   }
   return 0;
}


RAONE - Ra-One Numbers

no tags 

In the War between good and evil . Ra-One is on the evil side and G-One on the good side.

Ra-One is fond of destroying cities and its G-one's duty to protect them..

 

Ra-One loves to destroy cities whose Zip Code has special properties. He says he loves to destroy cities which have Ra-One numbers as their ZIp Code.

Any number is Ra-one if the Difference between Sum of digits at even location and Sum of digits at odd location is One (1).. For eg... for 234563 is Ra-One number

digits at odd location are 3,5,3 (unit place is location 1 )

digits at even location are 2,4,6

Diff = (2+4+6)-(3+5+3)=12-11 = 1.

And 123456 is not Ra-One number

diff = (5+3+1) - (2+4+6) = -4

 

G-One knows this about Ra-one and wants to deploy his Army members in those cities. 1 army member will be deployed in each city.

G-one knows the range of ZIP-Codes where Ra-One might attack & needs your help to find out how many army members he needs.

Can you help Him ?

Input

first line will have only one integer 't' number of Zip-Code ranges. it is followed by t lines

each line from 2nd line cotains 2 integer 'from'  and 'to'. these indicate the range of Zip codes where Ra-one might attack .(from and to are included in the range)

Output

A single number for each test case telling how many army members G-One needs to deploy.

each number should be on separate lines

Example

Input:
2
1 10
10 100


 Output:
1
9
explanation:
for 1st test case the only number is 10
for 2nd test case numbers are 10,21,32,43,54,65,76,87,98

NOTE:
t will be less than 100
from and to will be between 0 and 10^8 inclusive
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值