题目(第四题第五题)

题目有两个操作,x/2和x-1,很容易就想到和二进制有关,但具体关系是什么呢。

可以考虑x/2和x-1都是左移的操作,于是就可以发现X开头的有趣数列中的数都是x的二进制前缀。

例如 111 110 11 10 1 0

那么判断[a,b]中的有趣数列是不是含有k,只需要把k当做前缀然后取和区间[a,b]相交的部分就可以了。

这个程序写得好丑= =。

View Code

 1 program Neayo;
 2 const
 3         inf='sequence.in';
 4         ouf='sequence.out';
 5 var
 6         i,j,t:longint;
 7         k,a,b,ans,kk:int64;
 8 function min(a,b:int64):int64;
 9 begin
10      if a<b then exit(a) else exit(b);
11 end;
12 procedure init;
13 begin
14      assign(input,inf);assign(output,ouf);
15      reset(input);rewrite(output);
16      readln(t);
17      for t:=1 to t do
18      begin
19           readln(k,a,b);
20           ans:=0;
21           if k>=b then
22           begin
23                if k>b then writeln(0) else writeln(1);
24                continue;
25           end;
26           if k=0 then
27           begin
28                writeln(b-a+1);
29                continue;
30           end;
31           if k>=a then
32           begin
33                a:=k;
34                inc(ans);
35                if (not odd(k))and(k+1<=b)then inc(ans);
36           end;
37           kk:=k;
38           if not odd(kk) then
39           begin
40                kk:=kk+1;
41                if (kk>=a)and(k<a) then inc(ans);
42           end;
43           while k<b do
44           begin
45                k:=k shl 1;
46                kk:=(kk shl 1)+1;
47                if k>b then break;
48                if k>=a then ans:=ans+min(kk,b)-k+1;
49                if (k<a)and(kk>=a) then ans:=ans+min(kk,b)-a+1;
50           end;
51           writeln(ans);
52      end;
53      close(input);
54 end;
55 begin
56      init;
57      close(output);
58 end.

乍一看和上一道题好像。。。

贪心地分析可发现至少需要减max次(max为初始序列中最大的数),至多也只要减max次。因为如果把最大的数*2的话显然会增多很多次数。

于是有这样一个性质x-a/y-a是随着a的增大而减小的,那么对于那些x/max>1/2的数字,总会有个时候使x-a/max-a=1/2,那么我们只需要对它们*2就行了。

对于比max/2还要小的数,就先把它们变得比max/2大,再按照相同步骤处理。

View Code

program Neayo;
constinf='sequence.in';ouf='sequence.out';
vari,j,k,n:longint;max,ans:int64;half,tmp:extended;a:array[0..200001]of int64;procedure init;
beginassign(input,inf);assign(output,ouf);reset(input);rewrite(output);readln(n);for i:=1 to n dobeginreadln(a[i]);if a[i]>max then max:=a[i];end;tmp:=max;half:=tmp/2;for i:=1 to n doif a[i]<max thenbegintmp:=a[i];inc(ans);while tmp<half dobegintmp:=tmp*2;inc(ans);end;end;inc(ans,max);writeln(ans);close(input);
end;begininit;close(output);
end.

转载于:https://www.cnblogs.com/neayo/archive/2012/11/06/2757320.html

两道与二进制有关的sequence相关推荐

  1. 云和恩墨的两道Oracle面试题

    云和恩墨的两道Oracle面试题 真题1. 对于一个NUMBER(1)的列,如果查询中的WHERE条件分别是大于3和大于等于4,那么这二者是否等价? 答案:首先对于查询结果而言,二者没有任何区别.从这 ...

  2. STO GZM Orz %%%% ender魔王考试题解(前两道)(贪心和DP)STO WK orz

    STO Ender orz 太强了        STO WK orz 太神了 首先,为什么是前两道呢? 因为最后一道是导数推论+泰勒展开,对于我一个初中生来说只能稍作理解,严格推论还是写不出 第一题 ...

  3. BAT七年经验,却抵不过外企面试的两道算法题?

    整理| 琥珀 出品| AI科技大本营 又遇年底跳槽季,如果你曾在 BAT 等互联网大厂有过较为丰富的工作经验,想要换份工作,面试时会主要考虑哪些因素? 面试外企,却被两道算法题难住? 近日,一位网友在 ...

  4. IT人的“钱”景以及收入的两道坎

    虽然IT工作五花八门,而且年纪有老有少,但IT人的收入总体还是比较有规律的,很明显的可以看出有两道坎,分别是10W,和30W,当然,我说的是年薪,是RMB,不包含任何跟销售相关的提成,也就是纯打工者的 ...

  5. 两道概率题-供大家周末把玩

    两道概率题-供大家周末把玩 题目 1.给定一个函数rand5(),该函数能等概率生成1-5之间的整数(包括1和5),如何用该函数等概率生成整数1-7? 解法 本以为很简单,做了以后才发现其实并不简单, ...

  6. 两道JVM面试题,竟让我回忆起了中学时代!

    中学授课模式 考虑到可能有部分粉丝对JVM参数不清楚,所以我们参照中学的授课模式,给大家做一些知识上的普及.理论上,JVM参数主要分为三类 1.标配参数 该类型参数在JDK各个版本之间稳定,很少有大的 ...

  7. 【笔试题】简单的两道笔试题(1、打印杨辉三角;2、三个数排序)

    笔试题 简单的两道笔试题(1.打印杨辉三角:2.三个数排序) 1.打印杨辉三角 import java.util.Scanner; public class MyYanghuiTriangle {pu ...

  8. 送给“苦逼”的IT人系列1:IT人的“钱”景以及收入的两道坎

    虽然IT工作五花八门,而且年纪有老有少,但IT人的收入总体还是比较有规律的,很明显的可以看出有两道坎,分别是10W,和30W,当然,我说的是年薪,是RMB,不包含任何跟销售相关的提成,也就是纯打工者的 ...

  9. Java中创建String的两道面试题及详解

    转载自 Java中创建String的两道面试题及详解 我们知道创建一个String类型的变量一般有以下两种方法: String str1 = "abcd";String str2 ...

最新文章

  1. Python+OpenCV 图像处理系列(4)—— 图像像素的读写、算术运算、逻辑运算及像素的统计
  2. anaconda切换python版本及对应环境,太方便
  3. python 获取ip
  4. Dwg图纸属性的读取
  5. 什么是TypeScript的字符串索引签名
  6. julia 调用python库_install julia with python
  7. couchbase php,从PHP SDK设置后,Couchbase视图不会更新
  8. ubuntu无法打开图片
  9. C# ActiveX 网页打包验证自动升级
  10. 一个超级实用的单片机调试技巧!DWT组件
  11. 安卓开发入门gps获取定位经纬度海拔速度
  12. 带饭省下的钱充3个月话费还嫌多!
  13. 安卓第四次作业——简单校园二手交易APP
  14. python 搜索 PDF文件 内容
  15. 【代码复现】ubuntu18.04复现DID-MDN问题总结
  16. codesign 想要访问您的钥匙串中的密钥
  17. 非谓语动词to do做主语
  18. 戴尔灵越7590 i7版安装manjaro踩坑及部分驱动问题解决
  19. 网络接入:AC控制器
  20. 找规律/数位DP HDOJ 4722 Good Numbers

热门文章

  1. c语言编程 三角波,周期矩形波、周期锯齿波、周期三角波,C语言程序.doc
  2. java如何压缩html代码,java 压缩html文件
  3. oracle including new values,物化视图日志加不加INCLUDING NEW VALUES有什么影响
  4. python3.7界面设计_基于selenium+Python3.7+yaml+Robot Framework的UI自动化测试框架
  5. Unity5x编辑器的视图二
  6. Android中事件分发机制的总结
  7. day01: oracle12C在Linux7.5上图形化安装部署方法:
  8. 微信小程序编译 tunneling socket could not be established,cause=connect ······
  9. java比较运算_Java比较运算符
  10. python中rim的用法_Python笔记(六)_函数