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: 21 1010 100 Output: 19explanation:
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 100from 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: 21 1010 100 Output: 19explanation:
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 100from and to will be between 0 and 10^8 inclusive
版权声明:本文为博主原创文章,未经博主允许不得转载。