18113 Secret Book of Kungfu 按位DFS
http://acm.scau.edu.cn:8000/uoj/mainMenu.html
18113 Secret Book of Kungfu
该题有题解
时间限制:1000MS 内存限制:65535K
提交次数:0 通过次数:0
题型: 编程题 语言: 不限定
Description
Uncle Big is acknowledged as a master of kung fu. But he doesn't think so. He thinks that there are many other unknown
experts in the world. So Uncle Big devotes all his life to find the highest realm of kung fu.
During a chance, Uncle Big discover a secret book of kungfu in a cave. But the book is broken and losts many pages. What's
worst, there's only some numbers writted on the book. After studying the book years and years, Uncle Big discover that all
this numbers have a common feature that, the decimal notation of a number is a substring of its binary notation. So Uncle
Big want to restore the book, in order to better understand it. Before doing this, Uncle Big has to know how many such numbers
between l and r (inclusive).
But now Uncle Big is so exciting because of this discovering, and has gone to race boat. Can you help him?
输入格式
The input file begins with an integer T (T <= 10000) in one row indicating the number of test case. Then T test cases
follows.
Each test case contains one line with two non-negetive integer l and r (l <= r <= 1000000000000000(1e15) ).
输出格式
For each test case, print one line with a integer as answer.
输入样例
1
1 1000
输出样例
8
提示
"1", "0", "10", "01", "101" are the substring of "101", but "11", "00" are not.
考虑按位DFS后再暴力判断,然后发现总数只有283个,记得加上0,就284个。打个表二分查找就好。
dfs数字的话,一般就是dfs(cur * 10 + 0),这个数位进位后,然后加上想要的数字
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL; #include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
LL L, R;
int ans;
char str_bin[];
char num[];
int lenstr;
void bin(LL n) {
if (n / ) bin(n / );
str_bin[++lenstr] = n % + '';
}
LL biao[ + ];
int lenbiao;
void dfs(LL cur) {
if (cur >= L && cur <= R) {
lenstr = ;
bin(cur);
int k = ;
LL t = cur;
while (t / > ) {
num[++k] = t % + '';
t /= ;
}
num[++k] = t + '';
num[k + ] = '\0';
str_bin[lenstr + ] = '\0';
// cout << str_bin + 1 << endl; reverse(num + , num + + k);
// cout << num + 1 << endl;
// cout << endl;
char *p = strstr(str_bin + , num + );
if (p != NULL)
biao[++lenbiao] = cur;
}
if (cur > R) return;
dfs(cur * );
dfs(cur * + );
}
void work() {
cin >> L >> R;
if (L > R) swap(L, R);
int posR = lower_bound(biao + , biao + + lenbiao, R) - biao;
int posL = lower_bound(biao + , biao + + lenbiao, L) - biao;
if (biao[posL] == L && biao[posR] == R) {
cout << posR - posL + << endl;
} else if (biao[posL] == L && biao[posR] != R) {
cout << posR - posL << endl;
} else if (biao[posL] != L && biao[posR] == R) {
cout << posR - posL + << endl;
} else {
cout << posR - posL << endl;
}
}
void init() {
biao[++lenbiao] = ;
L = ;
R = 1e15L;
dfs();
sort(biao + , biao + + lenbiao);
}
int main() {
#ifdef local
freopen("data.txt","r",stdin);
#endif
IOS;
init();
int t;
cin >> t;
while (t--) work();
return ;
}
18113 Secret Book of Kungfu 按位DFS的更多相关文章
- hdoj 1342 Lotto【dfs】
Lotto Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- hdu 5676 ztr loves lucky numbers(dfs+离线)
Problem Description ztr loves lucky numbers. Everybody knows that positive integers are lucky if the ...
- POJ 2676 Sudoku (数独 DFS)
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14368 Accepted: 7102 Special Judg ...
- HDU 5676 ztr loves lucky numbers【DFS】
题目链接; http://acm.hdu.edu.cn/showproblem.php?pid=5676 题意: 由4和7组成的且4和7出现次数相同的数称为幸运数字,给定n,求不大于n的最大幸运数字. ...
- codeforces 686C C. Robbers' watch(dfs)
题目链接: C. Robbers' watch time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- CodeForces 686C-Robbers' watch
题意: 一个电子手表的示数是7进制的,现在告诉你一天有多少小时和一小时有多少分钟,问你一天里有多少个时刻,这个表上显示的数字各不相同. 分析: 先找出表上有多少位数字,再按位dfs,看最后得到的数是否 ...
- 【一天一道LeetCode】#299. Bulls and Cows
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 You are ...
- 防盗链之URL参数签名
一.概述 传统的 IP 禁用.referer 防盗链.User-Agent 防盗链.地区访问控制等防盗链措施已经无法完全满足用户要求,所以开发出URL参数签名方式来防盗链 二.实现 Token防盗链是 ...
- 防盗链之URL参数签名 总结
一.概述 传统的 IP 禁用.referer 防盗链.User-Agent 防盗链.地区访问控制等防盗链措施已经无法完全满足用户要求,所以开发出URL参数签名方式来防盗链 二.实现 Token防盗链是 ...
随机推荐
- css父元素背景覆盖其子元素背景
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- shell---rpm
[root@master src]# rpm -qpl epel-release-latest-6.noarch.rpm ##查询该rpm包安装了什么warning: epel-rel ...
- 基于区域的全卷积神经网络(R-FCN)简介
在 Faster R-CNN 中,检测器使用了多个全连接层进行预测.如果有 2000 个 ROI,那么成本非常高. feature_maps = process(image)ROIs = region ...
- bzoj 2836 魔法树——树链剖分
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2836 树剖裸题.然而WA.RE了好久…… 原来是跳 top 的那个地方! top 不相等的时 ...
- 配置tomcat https的步骤
keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\tomcat.keystore -validity 36500 keytool -g ...
- 如何正确遍历删除List中的元素,你会吗?
遍历删除List中的元素有很多种方法,当运用不当的时候就会产生问题.下面主要看看以下几种遍历删除List中元素的形式: 1.通过增强的for循环删除符合条件的多个元素 2.通过增强的for循环删除符合 ...
- Valera and Swaps
题意: 定义 $f(p)$ 表示将 $p$ 序列变换为有序序列最少要交换多少次,给一 $1 \sim n$ 的排列 $a$ ,给一整数 $m$, 求问将 $a$ 最少交换多少次能得到 $p$ ,使得 ...
- app自动化测试工具robotium
robotium基于instramentation框架,可对app白盒黑盒测试,缺点是测试进程和被测进程需要在一个进程中,不能跨应用 白盒测试时,需要app源代码,在eclipse里新建android ...
- 算法学习--Day8
今天重拾算法复习. 今天学习了两个类型的算法——并查集与最小生成树(MST) 简单记录一下并查集的大致内容. 一.并查集的内容大致作用为查找当前图中的点有几个集合. 该算法起到查询分组的情况.通过给定 ...
- hdoj5493【树状数组+二分】
题意: 给你n个人的高度, 再给出一个值代表该高度下有前面比他高的 或 后面比他高的人数, 求满足条件下的最小字典序, 不行的话输出"impossible" 思路: 对于最小字典序 ...