题目链接

一个数称为平衡数, 满足他各个数位里面的数, 奇数出现偶数次, 偶数出现奇数次, 求一个范围内的平衡数个数。

用三进制压缩, 一个数没有出现用0表示, 出现奇数次用1表示, 出现偶数次用2表示, 这样只需要开一个20*60000的数组。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define pb(x) push_back(x)
  4. #define ll long long
  5. #define mk(x, y) make_pair(x, y)
  6. #define lson l, m, rt<<1
  7. #define mem(a) memset(a, 0, sizeof(a))
  8. #define rson m+1, r, rt<<1|1
  9. #define mem1(a) memset(a, -1, sizeof(a))
  10. #define mem2(a) memset(a, 0x3f, sizeof(a))
  11. #define rep(i, a, n) for(int i = a; i<n; i++)
  12. #define ull unsigned long long
  13. typedef pair<int, int> pll;
  14. const double PI = acos(-1.0);
  15. const double eps = 1e-;
  16. const int mod = 1e9+;
  17. const int inf = ;
  18. const int dir[][] = { {-, }, {, }, {, -}, {, } };
  19. int digit[], a[];
  20. ll dp[][];
  21. int judge(int num) {
  22. int cnt = ;
  23. for(int i = ; i<; i++) {
  24. a[i] = num%;
  25. num/=;
  26. }
  27. for(int i = ; i<; i++) {
  28. if(i%==&&a[i]==)
  29. return ;
  30. if(i%==&&a[i]==)
  31. return ;
  32. }
  33. return ;
  34. }
  35. int cal(int num, int tmp) {
  36. int cnt = ;
  37. for(int i = ; i<; i++) {
  38. a[i] = num%;
  39. num/=;
  40. }
  41. a[tmp]++;
  42. if(a[tmp]==)
  43. a[tmp]=;
  44. for(int i = ; i>=; i--) {
  45. num = num*+a[i];
  46. }
  47. return num;
  48. }
  49. ll dfs(int len, int num, int fp, bool first) {
  50. if(!len) {
  51. return judge(num);
  52. }
  53. if(!fp&&dp[len][num]!=-) {
  54. return dp[len][num];
  55. }
  56. ll ret = ;
  57. int maxx = fp?digit[len]:;
  58. for (int i = ; i<=maxx; i++) {
  59. ret += dfs(len-, (first&&i==)?:cal(num, i), fp&&i==maxx, i==&&first);
  60. }
  61. if(!fp)
  62. return dp[len][num] = ret;
  63. return ret;
  64. }
  65. ll cal(ll n) {
  66. int len = ;
  67. while(n) {
  68. digit[++len] = n%;
  69. n/=;
  70. }
  71. return dfs(len, , , true);
  72. }
  73. int main()
  74. {
  75. mem1(dp);
  76. int t;
  77. ll a, b;
  78. cin>>t;
  79. while(t--) {
  80. scanf("%lld%lld", &a, &b); //I64d会超时......
  81. printf("%lld\n", cal(b)-cal(a-));
  82. }
  83. }

spoj 10606 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 Balanced Numbers(数位dp)

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

  3. Balanced Numbers (数位DP)

    Balanced Numbers https://vjudge.net/contest/287810#problem/K Balanced numbers have been used by math ...

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

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

  5. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP)

    2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP) 链接:https://ac.nowcoder.com/acm/contest/163/ ...

  6. SPOJ BALNUM Balanced Numbers (数位dp)

    题目:http://www.spoj.com/problems/BALNUM/en/ 题意:找出区间[A, B]内所有奇数字出现次数为偶数,偶数字出现次数为计数的数的个数. 分析: 明显的数位dp题, ...

  7. SPOJ - BALNUM Balanced Numbers(数位dp+三进制状压)

    Balanced Numbers Balanced numbers have been used by mathematicians for centuries. A positive integer ...

  8. SPOJ - BALNUM - Balanced Numbers(数位DP)

    链接: https://vjudge.net/problem/SPOJ-BALNUM 题意: Balanced numbers have been used by mathematicians for ...

  9. HDU 3709 Balanced Number (数位DP)

    Balanced Number Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) ...

随机推荐

  1. webview与JavaScript之间的交互

    据说WebView的强大之处就是能和JavaScript进行交互调用. 参考博客:http://droidyue.com/blog/2014/09/20/interaction-between-jav ...

  2. SQL SERVER2012 无法连接远程服务器

    SQL SERVER2012 无法连接远程服务器,报"尝试读取受保护的内存"错误. 解决方法: 运行CMD,输入 netsh winsock reset,回车.重启SSMS,搞定.

  3. 【codevs】2776寻找代表元

    题目描述 Description 广州二中苏元实验学校一共有n个社团,分别用1到n编号.广州二中苏元实验学校一共有m个人,分别用1到m编号.每个人可以参加一个或多个社团,也可以不参加任何社团.每个社团 ...

  4. 用正则表达式替换内容 php

    以前做一个项目,就是有一个问答的页面,比如说在回答或者提问的内容中插入表情.写到内容里的是表情图片的名字(而且是不带后缀的,比如:f_002.png)表情包放在项目里,我需要在取除内容的时候将里面的表 ...

  5. Python核心编程读笔 7: 条件和循环

    第八章 条件和循环 一.if python中的条件表达式:很奇葩!!! smaller = (x < y and [x] or [y])[0] 或者: smaller = x if x < ...

  6. Linux学习之(())操作符

    在刚开始学习inux shell脚本编程时候,对于它的 四则运算以及逻辑运算.估计很多朋友都感觉比较难以接受.特变逻辑运算符”[]”使用时候,必须保证运算符与算数 之间有空格. 四则运算也只能借助:l ...

  7. eclipse 异常Unhandled event loop exception

    出了这一类的异常问题,大都是一些图像优化软件插件等等. 出现的问题大都是,一些eclipse模块不显示,或者点击不反应,出现最多的次数是点击断点的时候. 我这里是Catalyst Control Ce ...

  8. 利用JSP编程技术实现一个简单的购物车程序

    实验二   JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP ...

  9. 异步流程控制库GoWithTheFlow

    异步流程控制库GoWithTheFlow 一个尾触发方式来控制异步流程的库, 有seq(顺序执行) par(同步执行) 两种方法 博客 http://notes.jetienne.com/2011/0 ...

  10. charset

    <meta charset="UTF-8" /> 这是html5的写法. <meta http-equiv=“content-type” content=“tex ...