BD String

Accepts: 388
Submissions: 1164
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
Problem Description

众所周知,度度熊喜欢的字符只有两个:B和D。

今天,它发明了一种用B和D组成字符串的规则:

S(1)=BS(1)=BS(1)=B

S(2)=BBDS(2)=BBDS(2)=BBD

S(3)=BBDBBDDS(3)=BBDBBDDS(3)=BBDBBDD

S(n)=S(n−1)+B+reverse(flip(S(n−1))S(n)=S(n-1)+B+reverse(flip(S(n-1))S(n)=S(n−1)+B+reverse(flip(S(n−1))

其中,reverse(s)reverse(s)reverse(s)指将字符串翻转,比如reverse(BBD)=DBBreverse(BBD)=DBBreverse(BBD)=DBB,flip(s)flip(s)flip(s)指将字符串中的BBB替换为DDD,DDD替换为BBB,比如flip(BBD)=DDBflip(BBD)=DDBflip(BBD)=DDB。

虽然度度熊平常只用它的电脑玩连连看,这丝毫不妨碍这台机器无与伦比的运算速度,目前它已经算出了S(21000)S(2^{1000})S(2​1000​​)的内容,但度度熊毕竟只是只熊,一次读不完这么长的字符串。它现在想知道,这个字符串的第LLL位(从1开始)到第RRR位,含有的BBB的个数是多少?

Input

第一行一个整数TTT,表示T(1≤T≤1000)T(1 \leq T \leq 1000)T(1≤T≤1000) 组数据。

每组数据包含两个数LLL和R(1≤L≤R≤1018)R(1 \leq L \leq R \leq 10^{18})R(1≤L≤R≤10​18​​) 。

Output

对于每组数据,输出S(21000)S(2^{1000})S(2​1000​​)表示的字符串的第LLL位到第RRR位中BBB的个数。

Sample Input
  1. 3
  2. 1 3
  3. 1 7
  4. 4 8
Sample Output
  1. 2
  2. 4
  3. 3

    很好的解释http://www.cnblogs.com/chen9510/p/5515247.html
  1. 1 #include<stdio.h>
  2. 2 #include<algorithm>
  3. 3 #include<iostream>
  4. 4 #include<stdlib.h>
  5. 5 #include<string.h>
  6. 6 #include<queue>
  7. 7 #include<stack>
  8. 8 using namespace std;
  9. 9 typedef long long LL;
  10. 10 LL ans[66];
  11. 11 LL bns[66];
  12. 12 LL ask(LL n);
  13. 13 int main(void)
  14. 14 {
  15. 15 LL i,j,k;
  16. 16 ans[1]=1;
  17. 17 LL ak=2;
  18. 18 bns[1]=1;
  19. 19 for(i=2; i<=60; i++)
  20. 20 {
  21. 21 ak*=2;
  22. 22 ans[i]=ans[i-1]*2;
  23. 23 bns[i]=ak-1;
  24. 24 }
  25. 25 LL n,m;
  26. 26 int s;
  27. 27 cin>>s;
  28. 28 for(i=0; i<s; i++)
  29. 29 {
  30. 30 scanf("%lld %lld",&n,&m);
  31. 31 printf("%lld\n",ask(m)-ask(n-1));
  32. 32 }
  33. 33 return 0;
  34. 34 }
  35. 35 LL ask(LL n)
  36. 36 {
  37. 37 int i;
  38. 38 LL sum=0;
  39. 39 if(n==0)return 0;
  40. 40 for(i=1; i<=60; i++)
  41. 41 {
  42. 42 if(bns[i]>=n)
  43. 43 break;
  44. 44 }
  45. 45 if(n==bns[i])
  46. 46 {
  47. 47 return ans[i];
  48. 48 }
  49. 49 else
  50. 50 {
  51. 51 LL cc=n-bns[i-1];
  52. 52 return cc+ask(2*bns[i-1]-n+1);
  53. 53 }
  54. 54 }
  1.  
  1.  

BD String的更多相关文章

  1. hdu-5694 BD String(分治)

    题目链接: BD String Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) ...

  2. HDU 5694 BD String 迭代

    BD String 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5694 Description Problem Description 众所周知, ...

  3. HDU 5694——BD String——————【递归求解】

    BD String Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  4. E - BD String

    众所周知,度度熊喜欢的字符只有两个:B和D. 今天,它发明了一种用B和D组成字符串的规则: S(1)=B S(2)=BBD S(3)=BBDBBDD - S(n)=S(n−1)+B+reverse(f ...

  5. 2016"百度之星" - 初赛(Astar Round2A)1005 BD String(HDU5694)——找规律、字符串对称、分治

    分析:按照题目所给的意思每次处理得到的新的字符串都是具有高度对称性的,举个例子,如题目所给的第三个字符串,最中间的是B然后两边分散开去,一边是B的话另外一边关于这个中心对称的那个位置一定是D,反过来同 ...

  6. HDU 5694 BD String 递归暴力

    http://blog.csdn.net/angon823/article/details/51484906 #include <cstdio> #include <iostream ...

  7. BD string 百度之星初赛的题目 数学

    http://acm.hdu.edu.cn/showproblem.php?pid=5694 可以说这道题目挺考验思维含量的吧 首先,这个和数位dp是差不多的方法,计算cal(l)-cal(l-1): ...

  8. Lua基础之字符串(string)

    1,计算字符串长度 2,返回字符串s的n个拷贝 3,返回字符串全部字母大写 4,返回字符串全部字母小写 5,返回一个类似printf的格式化字符串 6,根据下标截取字符串 7,在字符串中查找 8,在字 ...

  9. lua string 库

    --lua中字符串索引从前往后是1,2,……,从后往前是-1,-2……. --string库中所有的function都不会直接操作字符串,只返回一个结果. ---------------------- ...

随机推荐

  1. 解决UE4项目编辑器启动时出现LogLinker: Warning: Failed to load '/Game/FirstPersonBP/FirstPersonOverview': Can't find file.

    UE4版本:4.24.3源码编译版本 Windows10 + VS2019环境 LogLinker: Warning: Failed to load '/Game/FirstPersonBP/Firs ...

  2. CAS简介

    概念 CAS(Compare And Swap 比较并交换),是 乐观锁 的一种典型实现机制. 乐观锁主要的两个步骤:冲突检测.数据更新. 当多个线程尝试使用CAS同时更新通过一个变量的时候,只有一个 ...

  3. absurd, abundant

    absurd How: absolutely, completely, clearly, faintly, manifestly, obviously, patently, quite, rather ...

  4. c++string转const char*与char*

    #include <iostream> #include <string> #include <memory> using namespace std; const ...

  5. scp命令的简单使用

    简介: scp是 secure copy的缩写, 是linux系统下基于ssh登陆进行安全的远程文件拷贝命令,Linux scp命令用于Linux之间复制文件和目录. 语法 scp [-1246BCp ...

  6. APP调用系统相册,使用3DTouch重压,崩溃

    崩溃:app调用系统相册,使用3DTouch重压,崩溃 问题描述 app调用系统相册,使用3DTouch重压,一般的app都会崩溃. 解决方法 写个分类即可 @implementation UICol ...

  7. SQL优化原理

    SQL优化过程: 1,捕获高负荷的SQL语句-->2得到SQL语句的执行计划和统计信息--->3分析SQL语句的执行计划和统计信息--->4采取措施,对SQL语句进行调整.1找出高负 ...

  8. mysq中char,varchar,text的区别

    mysql5.0.3以后,n都表示字符数(varchar(n)) 检索效率 char > varchar > text 当varchar长度超过255之后,跟text一致,但是设置varc ...

  9. JAVA日志发展史

    JAVA日志发展史 第一阶段 2001年以前,Java是没有日志库的,打印日志全凭System.out和System.err 缺点: 产生大量的IO操作同时在生产环境中无法合理的控制是否需要输出 输出 ...

  10. jdk1.8帮助文档中文可搜索

    jdk1.8帮助文档中文可搜索 链接:https://pan.baidu.com/s/11beeZLpEIhciOd14WkCpdg 提取码:t4lw