spoj 10606 Balanced Numbers 数位dp
一个数称为平衡数, 满足他各个数位里面的数, 奇数出现偶数次, 偶数出现奇数次, 求一个范围内的平衡数个数。
用三进制压缩, 一个数没有出现用0表示, 出现奇数次用1表示, 出现偶数次用2表示, 这样只需要开一个20*60000的数组。
- #include<bits/stdc++.h>
- using namespace std;
- #define pb(x) push_back(x)
- #define ll long long
- #define mk(x, y) make_pair(x, y)
- #define lson l, m, rt<<1
- #define mem(a) memset(a, 0, sizeof(a))
- #define rson m+1, r, rt<<1|1
- #define mem1(a) memset(a, -1, sizeof(a))
- #define mem2(a) memset(a, 0x3f, sizeof(a))
- #define rep(i, a, n) for(int i = a; i<n; i++)
- #define ull unsigned long long
- typedef pair<int, int> pll;
- const double PI = acos(-1.0);
- const double eps = 1e-;
- const int mod = 1e9+;
- const int inf = ;
- const int dir[][] = { {-, }, {, }, {, -}, {, } };
- int digit[], a[];
- ll dp[][];
- int judge(int num) {
- int cnt = ;
- for(int i = ; i<; i++) {
- a[i] = num%;
- num/=;
- }
- for(int i = ; i<; i++) {
- if(i%==&&a[i]==)
- return ;
- if(i%==&&a[i]==)
- return ;
- }
- return ;
- }
- int cal(int num, int tmp) {
- int cnt = ;
- for(int i = ; i<; i++) {
- a[i] = num%;
- num/=;
- }
- a[tmp]++;
- if(a[tmp]==)
- a[tmp]=;
- for(int i = ; i>=; i--) {
- num = num*+a[i];
- }
- return num;
- }
- ll dfs(int len, int num, int fp, bool first) {
- if(!len) {
- return judge(num);
- }
- if(!fp&&dp[len][num]!=-) {
- return dp[len][num];
- }
- ll ret = ;
- int maxx = fp?digit[len]:;
- for (int i = ; i<=maxx; i++) {
- ret += dfs(len-, (first&&i==)?:cal(num, i), fp&&i==maxx, i==&&first);
- }
- if(!fp)
- return dp[len][num] = ret;
- return ret;
- }
- ll cal(ll n) {
- int len = ;
- while(n) {
- digit[++len] = n%;
- n/=;
- }
- return dfs(len, , , true);
- }
- int main()
- {
- mem1(dp);
- int t;
- ll a, b;
- cin>>t;
- while(t--) {
- scanf("%lld%lld", &a, &b); //I64d会超时......
- printf("%lld\n", cal(b)-cal(a-));
- }
- }
spoj 10606 Balanced Numbers 数位dp的更多相关文章
- SPOJ BALNUM - Balanced Numbers - [数位DP][状态压缩]
题目链接:http://www.spoj.com/problems/BALNUM/en/ Time limit: 0.123s Source limit: 50000B Memory limit: 1 ...
- spoj Balanced Numbers(数位dp)
一个数字是Balanced Numbers,当且仅当组成这个数字的数,奇数出现偶数次,偶数出现奇数次 一下子就相到了三进制状压,数组开小了,一直wa,都不报re, 使用记忆化搜索,dp[i][s] 表 ...
- Balanced Numbers (数位DP)
Balanced Numbers https://vjudge.net/contest/287810#problem/K Balanced numbers have been used by math ...
- SPOJ10606 BALNUM - Balanced Numbers(数位DP+状压)
Balanced numbers have been used by mathematicians for centuries. A positive integer is considered a ...
- 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP)
2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 J Beautiful Numbers (数位DP) 链接:https://ac.nowcoder.com/acm/contest/163/ ...
- SPOJ BALNUM Balanced Numbers (数位dp)
题目:http://www.spoj.com/problems/BALNUM/en/ 题意:找出区间[A, B]内所有奇数字出现次数为偶数,偶数字出现次数为计数的数的个数. 分析: 明显的数位dp题, ...
- SPOJ - BALNUM Balanced Numbers(数位dp+三进制状压)
Balanced Numbers Balanced numbers have been used by mathematicians for centuries. A positive integer ...
- SPOJ - BALNUM - Balanced Numbers(数位DP)
链接: https://vjudge.net/problem/SPOJ-BALNUM 题意: Balanced numbers have been used by mathematicians for ...
- HDU 3709 Balanced Number (数位DP)
Balanced Number Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
随机推荐
- webview与JavaScript之间的交互
据说WebView的强大之处就是能和JavaScript进行交互调用. 参考博客:http://droidyue.com/blog/2014/09/20/interaction-between-jav ...
- SQL SERVER2012 无法连接远程服务器
SQL SERVER2012 无法连接远程服务器,报"尝试读取受保护的内存"错误. 解决方法: 运行CMD,输入 netsh winsock reset,回车.重启SSMS,搞定.
- 【codevs】2776寻找代表元
题目描述 Description 广州二中苏元实验学校一共有n个社团,分别用1到n编号.广州二中苏元实验学校一共有m个人,分别用1到m编号.每个人可以参加一个或多个社团,也可以不参加任何社团.每个社团 ...
- 用正则表达式替换内容 php
以前做一个项目,就是有一个问答的页面,比如说在回答或者提问的内容中插入表情.写到内容里的是表情图片的名字(而且是不带后缀的,比如:f_002.png)表情包放在项目里,我需要在取除内容的时候将里面的表 ...
- Python核心编程读笔 7: 条件和循环
第八章 条件和循环 一.if python中的条件表达式:很奇葩!!! smaller = (x < y and [x] or [y])[0] 或者: smaller = x if x < ...
- Linux学习之(())操作符
在刚开始学习inux shell脚本编程时候,对于它的 四则运算以及逻辑运算.估计很多朋友都感觉比较难以接受.特变逻辑运算符”[]”使用时候,必须保证运算符与算数 之间有空格. 四则运算也只能借助:l ...
- eclipse 异常Unhandled event loop exception
出了这一类的异常问题,大都是一些图像优化软件插件等等. 出现的问题大都是,一些eclipse模块不显示,或者点击不反应,出现最多的次数是点击断点的时候. 我这里是Catalyst Control Ce ...
- 利用JSP编程技术实现一个简单的购物车程序
实验二 JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP ...
- 异步流程控制库GoWithTheFlow
异步流程控制库GoWithTheFlow 一个尾触发方式来控制异步流程的库, 有seq(顺序执行) par(同步执行) 两种方法 博客 http://notes.jetienne.com/2011/0 ...
- charset
<meta charset="UTF-8" /> 这是html5的写法. <meta http-equiv=“content-type” content=“tex ...