两道与二进制有关的sequence
题目(第四题第五题)
题目有两个操作,x/2和x-1,很容易就想到和二进制有关,但具体关系是什么呢。
可以考虑x/2和x-1都是左移的操作,于是就可以发现X开头的有趣数列中的数都是x的二进制前缀。
例如 111 110 11 10 1 0
那么判断[a,b]中的有趣数列是不是含有k,只需要把k当做前缀然后取和区间[a,b]相交的部分就可以了。
这个程序写得好丑= =。
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大,再按照相同步骤处理。
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相关推荐
- 云和恩墨的两道Oracle面试题
云和恩墨的两道Oracle面试题 真题1. 对于一个NUMBER(1)的列,如果查询中的WHERE条件分别是大于3和大于等于4,那么这二者是否等价? 答案:首先对于查询结果而言,二者没有任何区别.从这 ...
- STO GZM Orz %%%% ender魔王考试题解(前两道)(贪心和DP)STO WK orz
STO Ender orz 太强了 STO WK orz 太神了 首先,为什么是前两道呢? 因为最后一道是导数推论+泰勒展开,对于我一个初中生来说只能稍作理解,严格推论还是写不出 第一题 ...
- BAT七年经验,却抵不过外企面试的两道算法题?
整理| 琥珀 出品| AI科技大本营 又遇年底跳槽季,如果你曾在 BAT 等互联网大厂有过较为丰富的工作经验,想要换份工作,面试时会主要考虑哪些因素? 面试外企,却被两道算法题难住? 近日,一位网友在 ...
- IT人的“钱”景以及收入的两道坎
虽然IT工作五花八门,而且年纪有老有少,但IT人的收入总体还是比较有规律的,很明显的可以看出有两道坎,分别是10W,和30W,当然,我说的是年薪,是RMB,不包含任何跟销售相关的提成,也就是纯打工者的 ...
- 两道概率题-供大家周末把玩
两道概率题-供大家周末把玩 题目 1.给定一个函数rand5(),该函数能等概率生成1-5之间的整数(包括1和5),如何用该函数等概率生成整数1-7? 解法 本以为很简单,做了以后才发现其实并不简单, ...
- 两道JVM面试题,竟让我回忆起了中学时代!
中学授课模式 考虑到可能有部分粉丝对JVM参数不清楚,所以我们参照中学的授课模式,给大家做一些知识上的普及.理论上,JVM参数主要分为三类 1.标配参数 该类型参数在JDK各个版本之间稳定,很少有大的 ...
- 【笔试题】简单的两道笔试题(1、打印杨辉三角;2、三个数排序)
笔试题 简单的两道笔试题(1.打印杨辉三角:2.三个数排序) 1.打印杨辉三角 import java.util.Scanner; public class MyYanghuiTriangle {pu ...
- 送给“苦逼”的IT人系列1:IT人的“钱”景以及收入的两道坎
虽然IT工作五花八门,而且年纪有老有少,但IT人的收入总体还是比较有规律的,很明显的可以看出有两道坎,分别是10W,和30W,当然,我说的是年薪,是RMB,不包含任何跟销售相关的提成,也就是纯打工者的 ...
- Java中创建String的两道面试题及详解
转载自 Java中创建String的两道面试题及详解 我们知道创建一个String类型的变量一般有以下两种方法: String str1 = "abcd";String str2 ...
最新文章
- Python+OpenCV 图像处理系列(4)—— 图像像素的读写、算术运算、逻辑运算及像素的统计
- anaconda切换python版本及对应环境,太方便
- python 获取ip
- Dwg图纸属性的读取
- 什么是TypeScript的字符串索引签名
- julia 调用python库_install julia with python
- couchbase php,从PHP SDK设置后,Couchbase视图不会更新
- ubuntu无法打开图片
- C# ActiveX 网页打包验证自动升级
- 一个超级实用的单片机调试技巧!DWT组件
- 安卓开发入门gps获取定位经纬度海拔速度
- 带饭省下的钱充3个月话费还嫌多!
- 安卓第四次作业——简单校园二手交易APP
- python 搜索 PDF文件 内容
- 【代码复现】ubuntu18.04复现DID-MDN问题总结
- codesign 想要访问您的钥匙串中的密钥
- 非谓语动词to do做主语
- 戴尔灵越7590 i7版安装manjaro踩坑及部分驱动问题解决
- 网络接入:AC控制器
- 找规律/数位DP HDOJ 4722 Good Numbers
热门文章
- c语言编程 三角波,周期矩形波、周期锯齿波、周期三角波,C语言程序.doc
- java如何压缩html代码,java 压缩html文件
- oracle including new values,物化视图日志加不加INCLUDING NEW VALUES有什么影响
- python3.7界面设计_基于selenium+Python3.7+yaml+Robot Framework的UI自动化测试框架
- Unity5x编辑器的视图二
- Android中事件分发机制的总结
- day01: oracle12C在Linux7.5上图形化安装部署方法:
- 微信小程序编译 tunneling socket could not be established,cause=connect ······
- java比较运算_Java比较运算符
- python中rim的用法_Python笔记(六)_函数