BD String

题目连接:

http://acm.hdu.edu.cn/showproblem.php?pid=5694

Description

Problem Description

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

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

S(1)=B

S(2)=BBD

S(3)=BBDBBDD

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

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

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

Input

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

每组数据包含两个数L和R(1≤L≤R≤1018) 。

Output

对于每组数据,输出S(21000)表示的字符串的第L位到第R位中B的个数。

Sample Input

3

1 3

1 7

4 8

Sample Output

2

4

3

Hint

题意

题解:

假设我知道了solve(i),表示求i之前有多少个b

那么答案就是solve(r)-solve(l-1)嘛

这个怎么实现呢?不停迭代下去就好了……

因为你S[i] = s[i-1]+1+rs[i-1]

这个可以迭代的,复杂度是logn的,具体看get函数的代码吧……

代码

  1. #include<stdio.h>
  2. #include<algorithm>
  3. #include<math.h>
  4. #include<queue>
  5. #include<cstring>
  6. #include<iostream>
  7. using namespace std;
  8. const int maxn = 61;
  9. long long len[maxn],B[maxn],D[maxn],sumB[maxn];
  10. void pre()
  11. {
  12. len[1]=B[1]=sumB[1]=1;
  13. for(int i=2;i<maxn;i++){
  14. len[i]=2LL*len[i-1]+1;
  15. B[i]=D[i-1]+1+B[i-1];
  16. D[i]=B[i-1]+D[i-1];
  17. }
  18. }
  19. long long get(long long x)
  20. {
  21. if(x==0)return 0;
  22. if(x==1)return 1;
  23. int p=lower_bound(len+1,len+61,x)-len;
  24. if(x==len[p])return B[p];
  25. if(x>=(len[p-1]+1)/2+1+len[p-1])
  26. return B[p-1]+1+get(x-len[p-1]-1)-1;
  27. return B[p-1]+1+get(x-len[p-1]-1);
  28. }
  29. void solve()
  30. {
  31. long long l,r;
  32. scanf("%lld%lld",&l,&r);
  33. cout<<get(r)-get(l-1)<<endl;
  34. }
  35. int main()
  36. {
  37. pre();
  38. int t;
  39. scanf("%d",&t);
  40. while(t--)solve();
  41. return 0;
  42. }

HDU 5694 BD String 迭代的更多相关文章

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

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

  2. HDU 5694 BD String 递归暴力

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

  3. hdu-5694 BD String(分治)

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

  4. HDU 4054 Number String

    HDU 4054 Number String 思路: 状态:dp[i][j]表示以j结尾i的排列 状态转移: 如果s[i - 1]是' I ',那么dp[i][j] = dp[i-1][j-1] + ...

  5. BD String

    BD String Accepts: 388 Submissions: 1164 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/ ...

  6. hdu 5311 Hidden String

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5311 Hidden String Description Today is the 1st anniv ...

  7. hdu 5311 Hidden String (BestCoder 1st Anniversary ($))(深搜)

    http://acm.hdu.edu.cn/showproblem.php?pid=5311 Hidden String Time Limit: 2000/1000 MS (Java/Others)  ...

  8. HDU 5311 Hidden String (暴力)

    题意:今天是BestCoder一周年纪念日. 比赛管理员Soda有一个长度为n的字符串s. 他想要知道能否找到s的三个互不相交的子串s[l1..r1], s[l2..r2], s[l3..r3]满足下 ...

  9. HDU 4668 Finding string (解析字符串 + KMP)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题意:给出一个压缩后的串,以及一个模式串,问模式串 ...

随机推荐

  1. Linux内存初始化【转】

    转自:http://www.cnblogs.com/super-king/p/3291120.html start_kernel -> setup_arch 在这个函数中我们主要看这几个函数. ...

  2. spin_lock & mutex_lock的区别? 【转】

    转自:http://blog.csdn.net/wilsonboliu/article/details/19190861 本文由该问题引入到内核锁的讨论,归纳如下   为什么需要内核锁? 多核处理器下 ...

  3. nginx_upstream_check_module-master对nginx的后端机器进行健康状态检查报403错误【转】

    在nginx.conf配置文件中 在server添加 location /nstatus { check_status; access_log off; #allow 192.168.2.11; #d ...

  4. Unity3D Instantiate慢的问题

    1.NGUI直接打开界面卡 2.角色放技能的时候卡 3.载入模型的时候卡 http://www.xuanyusong.com/archives/2925

  5. Linux 网络编程实例

    /*socket->bind->listen->accept->recv/recvfrom->send/sendto->close 客户端:socket->c ...

  6. C# Guid 16位 唯一

    public static class GuidExtentions { /// <summary> /// 根据GUID获取16位的唯一字符串 /// </summary> ...

  7. 深度学习在美团点评推荐平台排序中的应用&& wide&&deep推荐系统模型--学习笔记

    写在前面:据说下周就要xxxxxxxx, 吓得本宝宝赶紧找些广告的东西看看 gbdt+lr的模型之前是知道怎么搞的,dnn+lr的模型也是知道的,但是都没有试验过 深度学习在美团点评推荐平台排序中的运 ...

  8. jmeter之数据库

    https://www.cnblogs.com/ShadowXie/p/6007515.html

  9. Spring cloud Feign 调用端不生效

    如果提供方的接口经过测试是没问题的话. 消费方启动类加上@EnableFeignClients 注意定义的接口如果不和启动类在同一个包路径下,需要加basePackages 即:@EnableFeig ...

  10. 四B象限图