Balanced Numbers

Balanced numbers have been used by mathematicians for centuries. A positive integer is considered a balanced number if:

1)      Every even digit appears an odd number of times in its decimal representation

2)      Every odd digit appears an even number of times in its decimal representation

For example, 77, 211, 6222 and 112334445555677 are balanced numbers while 351, 21, and 662 are not.

Given an interval [A, B], your task is to find the amount of balanced numbers in [A, B] where both A and B are included.

Input

The first line contains an integer T representing the number of test cases.

A test case consists of two numbers A and B separated by a single space representing the interval. You may assume that 1 <= A <= B <= 1019

Output

For each test case, you need to write a number in a single line: the amount of balanced numbers in the corresponding interval

Example

  1. Input:
  2. 2
  3. 1 1000
  4. 1 9
  1. Output:
  2. 147
  3. 4
  4.  
  5. 题意:奇数个数为偶数,偶数个数为奇数。
  6.  
  7. 用三进制来表示0-9的状态,0为没有,1为奇数个,2为偶数个。
    3^10约为60000
    注意判断前导零。
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4.  
  5. ll a[],p[],st[][];
  6. ll dp[][];
  7.  
  8. ll dfs(int pos,int sta,bool lead,bool limit){
  9.  
  10. if(pos==-){
  11. for(int i=;i<=;i+=){
  12. if(st[sta][i]==) return ;
  13. }
  14. for(int i=;i<=;i+=){
  15. if(st[sta][i]==) return ;
  16. }
  17. return ;
  18. }
  19. if(!lead&&!limit&&dp[pos][sta]>-) return dp[pos][sta];
  20. int up=limit?a[pos]:;
  21. ll cnt=;
  22. for(int i=;i<=up;i++){
  23. if(i==&&lead){
  24. cnt+=dfs(pos-,sta,lead&&i==,limit&&i==a[pos]);
  25. }
  26. else if(st[sta][i]==){
  27. cnt+=dfs(pos-,sta-p[i],lead&&i==,limit&&i==a[pos]);
  28. }
  29. else{
  30. cnt+=dfs(pos-,sta+p[i],lead&&i==,limit&&i==a[pos]);
  31. }
  32. }
  33. if(!lead&&!limit) dp[pos][sta]=cnt;
  34. return cnt;
  35. }
  36. ll solve(ll x){
  37. int pos=;
  38. while(x){
  39. a[pos++]=x%;
  40. x/=;
  41. }
  42. return dfs(pos-,,true,true);
  43. }
  44. int main()
  45. {
  46. int t;
  47. ll l,r;
  48. scanf("%d",&t);
  49. memset(dp,-,sizeof(dp));
  50. p[]=;
  51. for(int i=;i<=;i++){
  52. p[i]=p[i-]*;
  53. }
  54. for(int i=;i<p[];i++){
  55. int ii=i,c=-;
  56. while(ii){
  57. c++;
  58. st[i][c]=ii%;
  59. ii/=;
  60. }
  61. }
  62. while(t--){
  63. scanf("%lld%lld",&l,&r);
  64. printf("%lld\n",(solve(r)-solve(l-)));
  65. }
  66. return ;
  67. }

SPOJ - BALNUM Balanced Numbers(数位dp+三进制状压)的更多相关文章

  1. SPOJ BALNUM - Balanced Numbers - [数位DP][状态压缩]

    题目链接:http://www.spoj.com/problems/BALNUM/en/ Time limit: 0.123s Source limit: 50000B Memory limit: 1 ...

  2. spoj 10606 Balanced Numbers 数位dp

    题目链接 一个数称为平衡数, 满足他各个数位里面的数, 奇数出现偶数次, 偶数出现奇数次, 求一个范围内的平衡数个数. 用三进制压缩, 一个数没有出现用0表示, 出现奇数次用1表示, 出现偶数次用2表 ...

  3. SPOJ10606 BALNUM - Balanced Numbers(数位DP+状压)

    Balanced numbers have been used by mathematicians for centuries. A positive integer is considered a ...

  4. spoj Balanced Numbers(数位dp)

    一个数字是Balanced Numbers,当且仅当组成这个数字的数,奇数出现偶数次,偶数出现奇数次 一下子就相到了三进制状压,数组开小了,一直wa,都不报re, 使用记忆化搜索,dp[i][s] 表 ...

  5. ZRDay6A. 萌新拆塔(三进制状压dp)

    题意 Sol 这好像是我第一次接触三进制状压 首先,每次打完怪之后吃宝石不一定是最优的,因为有模仿怪的存在,可能你吃完宝石和他打就GG了.. 因此我们需要维护的状态有三个 0:没打 1:打了怪物 没吃 ...

  6. HDU 3001 三进制状压DP

    N个城市,M条道路,每条道路有其经过的代价,每一个城市最多能够到达两次,求走全然部城市最小代价,起点随意. 三进制状压.存储每一个状态下每一个城市经过的次数. 转移方程: dp[i+b[k]][k]= ...

  7. 三进制状压 HDOJ 3001 Travelling

    题目传送门 题意:从某个点出发,所有点都走过且最多走两次,问最小花费 分析:数据量这么小应该是状压题,旅行商TSP的变形.dp[st][i]表示状态st,在i点时的最小花费,用三进制状压.以后任意进制 ...

  8. Codeforces Round #297 (Div. 2) [ 折半 + 三进制状压 + map ]

    传送门 E. Anya and Cubes time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  9. hdu3001(三进制状压)

    题目大意: 现在给你一个有n个点和m条边的图,每一条边都有一个费用,每个点不能经过超过两次,求所有点至少遍历一次的最小费用 其中n<=10 m没有明确限制(肯定不会超过1e5) 一看到这个数据范 ...

随机推荐

  1. mongodb所在目录空间不足解决方法

    1.原理是将目录/home/aa软连接到/usr/lib/下,以后从/usr/lib下读取的内容其实都是放在/home/aa下. 建议不要大范围动/usr下的内容,咋着也是属于系统目录,可能会对已装软 ...

  2. 「新手向」koa2从起步到填坑

    前传 出于兴趣最近开始研究koa2,由于之前有过一些express经验,以为koa还是很好上手的,但是用起来发现还是有些地方容易懵逼,因此整理此文,希望能够帮助到一些新人. 如果你不懂javascri ...

  3. win8.1系统相关

    win8.1系统相关 信息时代,系统更新速度非常快,十一月初,同事在网上花5元买了一个win8.1系统激活码,之后两周,我电脑由于系统故障,准备重装系统,借助他的系统,但无法激活,借用他购买的账号也不 ...

  4. [转]angular的路由机制

    在谈路由机制前有必要先提一下现在比较流行的单页面应用,就是所谓的single page APP.为了实现无刷新的视图切换,我们通常会用ajax请求从后台取数据,然后套上HTML模板渲染在页面上,然而a ...

  5. xmind的使用及入门

    初识 xmind是什么 比较 入门 下载 基本操作 主界面 美化 工具 导出 初识 xmind是什么 说白了就是传说中的思维导图,用它我们可以画出下面这些图: 额,这张图好丑. 好吧,换一张: 他就是 ...

  6. springCloud组件启动时,提示内部tomcat无法加载

    忘记拷贝当时的异常信息了. 本地启动模块,做测试 大概就是emmble tomcat就是表示内部tomcat无法启动. 出现这样的异常是由于配置中心得代码已经修改,但是没有从git上down下来,然后 ...

  7. 第十篇 javascript基础语法

    1)基本概念 a) 语句(statement)是为了完成某种任务而进行的操作,语句以分号结尾,一个分号就表示一个语句结束.:如:var a = 1; b) 表达式(expression),指一个为了得 ...

  8. python3 之 格式化json

    import json json_string = None with open("json_file.json") as f: json_string = f.read() tr ...

  9. 使用while 打印10~1,1~10

    使用while 打印10~1,1~10 #!/bin/bash i= ));do echo $i ((i--)) done 答案:109876543210 i= ));do echo $i ((i++ ...

  10. (转)详解C#中的反射

    本文转载自:http://blog.csdn.net/educast/article/details/2894892 两个现实中的例子:1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到 ...