Description

经过一系列的游戏之后,你终于迎来了今天的作业,第一个作业是预习一个超级美好的函数f(x),描述如下。

为了研究这个函数的性质,你决定定义一次变化为x=f(x)。

若x就经过若干次变化为k,则你就会觉得这是一个k变变数。

现在既然你已经这么觉得了,那就只好给定A,B,求有多少个A<=x<=B是k变变数了。

Input

输入包含三行。

第一行为一个整数k。

第二行为一个整数A。

第三行为一个整数B。

Output

输出仅一行,表示答案。

Sample Input

Sample Input 1131234567890123

Sample Input212345671234567

Sample Output

Sample Output18387584

Sample Output21000001

Hint

对于50%的数据,0<=k,A,B<=10^6

对于100%的数据,0<=k,A,B<=10^18  A<=B

题解

  • 首先,我们可以把所有数转换成二进制来看
  • 那么两个操作,一个显然就是把二进制下最后一位的1变成0,一个就是将二进制右移一位
  • 这样每次修改的只可能是最后一个数,这样的话我们就可以想到,对于一个数若可以变成k
  • 那么它在二进制下k一定是它的一个从1开始的子串(前继)
  • 想到这里的话,其实就很容易做了
  • 这题貌似还有一种极其暴力的算法,而跑的贼快
  • 对于一个偶数,那么它可以拓展的就是2*n,2*n+1然后这两个数又可以往下拓展
  • 暴力碾表算!!!

代码

 1 #include <cstdio>
 2 #include <cstring>
 3 #define ll long long
 4 using namespace std;
 5 ll k,A,B,mi[640];
 6 int tot[640],num[640];
 7 ll calc(ll x)
 8 {
 9     if (x<k) return 0;
10     if (x==k) return 1;
11     memset(tot,0,sizeof(tot));
12     ll l=x,ans=0,p,q;
13     while (l>0) tot[++tot[0]]=l%2,l/=2;
14     for (int i=num[0];i<tot[0];i++) ans+=mi[i-num[0]];
15     for (int i=1;i<=tot[0];i++)
16     {
17         if (i>num[0]) p=0; else p=num[num[0]-i+1];
18         q=tot[tot[0]-i+1]; if (p>q) break;
19         if (i<=num[0]&&q>p) { ans+=mi[tot[0]-num[0]]; break; }
20         if (i>=num[0]&&q>p) ans+=mi[tot[0]-i];
21         if (i==tot[0]&&q>=p) ans++;
22     }
23     return ans;
24 }
25 int main()
26 {
27     scanf("%lld%lld%lld",&k,&A,&B),mi[0]=1;
28     for (int i=1;i<=63;i++) mi[i]=mi[i-1]*2;
29     if (k==0) { printf("%lld",B-A+1); return 0; }
30     if (B<k) { printf("0"); return 0; }
31     if (k%2==0) k/=2; ll l=k;
32     while (l>0) num[++num[0]]=l%2,l/=2;
33     printf("%lld",calc(B)-calc(A-1));
34 }

转载于:https://www.cnblogs.com/Comfortable/p/10309785.html

[Brute force][规律] Jzoj P3084 超级变变变相关推荐

  1. DVWA 之暴力破解攻击(Brute Force)

    暴力破解(Brute Force)的意思是攻击者借助计算机的高速计算不停枚举所有可能的用户名和密码,直到尝试出正确的组合,成功登录系统.理论上,只要字典足够大,破解总是会成功的.阻止暴力破解的最有效方 ...

  2. Go 语言实现字符串匹配算法 -- BF(Brute Force) 和 RK(Rabin Karp)

    今天介绍两种基础的字符串匹配算法,当然核心还是熟悉一下Go的语法,巩固一下基础知识 BF(Brute Force) RK(Rabin Karp) 源字符串:src, 目标字符串:dest: 确认des ...

  3. 网络规划设计师考试命题模式持续在变   你变不变

    命题模式持续在变    你变不变 深入分析2009下半年-2010下半年3次网络规划设计师考试试卷中项目管理模块(约有5~8题,约占总分数的6.67%~10.67%)的命题规律,心中最强烈的一份感觉体 ...

  4. 命题模式持续在变 你变不变

    命题模式持续在变    你变不变 深入分析2009上半年-2011上半年历次系统集成项目管理工程师考试试卷的命题规律,心中最强烈的一份感觉体现在一个字--变."变"是事物持续发展的 ...

  5. 吴昊品游戏核心算法 Round 7 —— 熄灯游戏AI(有人性的Brute Force)(POJ 2811)

    暴力分为两种,一种属于毫无人性的暴力,一种属于有人性 的暴力.前面一种就不说了,对于后面一种情况,我们可以只对其中的部分问题进行枚举,而通过这些子问题而推导到整个的问题中.我称之为有人性的Brute ...

  6. 怎样洗头使头发变黑变多

    洗头法 头发变黑变粗--用淘米水洗头.每天煮饭时会产生淘米水,请将淘米水留下,装在一个容器内放上二天,让它自然发酵.然后用来洗头,三天洗一次,不出三个月,你的头发就会变粗.变黑. 发酵后的淘米水会有一 ...

  7. 网络安全入门之 Burp Suite 暴力破解 DVWA Brute Force Low

    文章目录 1. 背景 2. 准备工作 2.1. 靶场环境 2.2. 安装破解工具 3. 破解过程 3.1. 代理请求 3.2. 拦截请求 3.3. 填装弹药 3.4. 设置岗哨 3.5. 开始攻击 4 ...

  8. Brute Force算法介绍及C++实现

    字符串的模式匹配操作可以通过Brute Force算法来实现.字符串匹配操作即是查看S串(目标串或主串)中是否含有T串(模式串或子串),如果在主串中查找到了子串,则模式匹配成功,返回模式串中的第一个字 ...

  9. javascript基础——文字变大变小className的使用及JS浮动的兼容用法

    文字变大变小,详情页比较常见的那种 <!DOCTYPE html> <html lang="en"> <head><meta charse ...

最新文章

  1. 财务大数据比赛有python吗-如何在一个月之内掌握python数据分析,参加大数据比赛?...
  2. webpack从零开始第2课: 配置文件
  3. asterisk-通道变量列表
  4. m4a录音文件损坏修复_电脑录音软件哪个好?分享这款录音软件,供你参考!
  5. 清除2960交换机的配置
  6. JVM 调优实战--JVM的运行参数及jinfo查看运行参数信息
  7. 少儿编程100讲轻松学python(一)-python怎么打开
  8. iptables快速记忆总结
  9. AXure破解授权码
  10. toolchain安装教程支持_网上现成toolchain安装操作
  11. css子元素和后代元素选择器
  12. 固体激光器的转换效率
  13. vscode中使用beautify插件格式化vue文件(自定义快捷键)
  14. 软件测试面试题全网独家没有之一的资深测试工程师面试题集锦
  15. HTML5模拟齿轮动画
  16. AsyncTask 的参数
  17. java中io流,Reader和Writer,InputStream和OutputStream,转换流 InputStreamReader 和 OutputStreamWriter
  18. 第六章_信号 : signal函数--信号
  19. 一款js控制背景图片平铺
  20. 什么是智能客服?智能客服能做到什么?

热门文章

  1. win10电脑怎么设置最佳性能?
  2. 布尔教育 高端php培训,最新布尔教育php最后一期学员(完整)
  3. C# 之 随机数应用 -- 洗牌算法
  4. T-SQL的简介以及基本语法
  5. skycc营销软件为我赚取的第一个30万
  6. MVVM 和 VUE三要素:响应式、模板引擎、渲染
  7. 【深度学习入门】基于 ResNet50 的狗狗品种识别
  8. MATLAB 求任意一个数的所有因子
  9. matlab中==、~=、的含义
  10. 报表控件ActiveReports快速入门指南 - 如何为报表创建、添加数据