codeforces problem 768B

这是第一篇博客?日志也行。。。
codeforces problem 768B
这个题做了很长时间--好几天吧,有空的时候就想怎么做。
问题描述看 http://codeforces.com/problemset/problem/768/B
看起来是个三叉树的题目。最开始我想用递归完成,遍历每一个节点,并判断节点是否在区间内,累加区间内的1。
但是2^50的数量级不可能在规定time和memory的情况下完成。

做了很多草稿,才逐渐明白以下几点,
1. 只有x mod 2才会产生0, 其余叶肯定都是1,所以只用数区间[L,R]的0的个数
2. 把每一步看做三叉树,我们只需要简单的计算(x 循环除 2,直到结果为1)就可以知道该树的最大层数 max
3. 三叉树的层数肯定不会超过50,并且每一层的“中间叶节点”都是相同的(x mod 2),用数组temp记录每一层的叶节点值
4. 第 k 层 的第 0 个叶节点左边共有 ADL = 2^(max - k + 1)个叶节点,
5. 第 k 层 的第 0 个叶节点编号为 ADL + 1 = 2^(max - k + 1) + 1,
6. 第 k 层 的第 x 个叶节点编号为多少? 同样可以算出来 location = (2 * x + 1) * ADL + 2 * x + 1 = (2 * x + 1) * (ADL + 1)
7. 到这一步,我们可以根据变量 k ∈ [1,max] 遍历出每一层每一个叶节点的位置编号,判断是否在[L,R]内,然后根据层数累加0的个数
8. 但是这样效率仍然不高,我们实际上还是遍历了整棵树的一半的叶节点。 还得根据location, L, R的关系计算 x 的范围
9. L < location < R 求出每一层的 x 的范围,然后再累加x对应的叶节点的取值.
10. 至少做到上面这些才够.事实上还可以优化.
11. 需要提前额外考虑初始值为0或1的情况。

Java源码奉上,仅供参考,

import java.util.Scanner;public class Simple {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);long[] data = getnumber(sc.nextLine());int[] temp = new int[51];int sum = 0;int i = 1;if(data[0] == 0 || data[0] == 1){System.out.print(data[0]);}else {for (; i < temp.length; i++) {temp[i] = (int) (data[0] % 2);data[0] = data[0] / 2;if(data[0] == 1){break;}}for (int k = 1; k <= i; k++) {long add = (long) (Math.pow(2, i-k+1) - 1);long low = (data[1] - add - 1)/(2*(add + 1));long high = (data[2] - add - 1)/(2*(add + 1));for (long x = low; x <= high; x++) {long location = (2 * x + 1) * add + 2 * x + 1;if(location >= data[1] && location <= data[2]){if(temp[k] == 0){sum++;}}}}System.out.println(data[2] - data[1] - sum + 1);}}public static long[] getnumber(String temp) {String[] t = temp.split("\\s");long[] data = new long[t.length];for(int i=0;i < t.length;i++){data[i] = Long.valueOf(t[i]);}return data;}}

  

转载于:https://www.cnblogs.com/weihuan098/p/6484559.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人工智能与经济生产力:期待进化,而不是革命

Illustration: Edmon de Haro来源&#xff1a; IEEE电气电子工程师尽管大肆宣传&#xff0c;人工智能仍需数年时间才能显著提高经济生产力。2016年&#xff0c;总部位于伦敦的Alphabet&#xff08;也是谷歌的母公司&#xff09;的子公司DeepMind Technologies报告称&#xff0c…

oracle 表 上限,Oracle分区表(Partition Table)的数量限制

Oracle分区表(Partition Table)的数量限制有朋友在我的留言板上问到这样一个问题:oracle分区表是不是有最大分区个数限制,我有一张大约20G的表,有好多分区(按时间),结果根据这个时间条件查询就报ORA-03113 end-of-file on communication channel错误,然后断开链接,硬件与网络都…

wpf 控件生成图片_EyeshotCAD控件生成以及作用

EyeshotCAD控件生成以及作用devDept Software是一家软件开发公司&#xff0c;成立于2006年&#xff0c;总部位于意大利博洛尼亚。 devDept Software是Microsoft .NET Framework的全球最大的CAD软件组件提供商。devDept SoftwareEyeshot的旗舰产品Eyeshot旨在满足CAD开发人员不断…

张恭庆院士:数学的意义(最全最牛的解释)

来源&#xff1a;数学严老师北京大学数学科学学院教授、中国科学院院士、第三世界科学院院士数学既是一种文化、一种“思想的体操”&#xff0c;更是现代理性文化的核心。马克思说&#xff1a;“一门科学只有当它达到了能够成功地运用数学时&#xff0c;才算真正发展了。”在前…

动态通过网络获取json来tabbar图片和文字或其他信息

动态通过网络获取json来tabbar图片和文字或其他信息转载于:https://www.cnblogs.com/TheYouth/p/6488843.html

oracle 根据分隔符提取,oracle使用指定分隔符导出数据到文件

最近有需求要导出一个专业的详单&#xff0c;用于倒入sqlserver系统&#xff0c;要求用分隔符隔开各字段。一开始准备用toad查询出来在save as&#xff0c;但发现表太多&#xff0c;要一张一张表盯着&#xff0c;而且由于详单数据量大&#xff0c;查询导出占用了大量的客户端内…

vue mxgraph渲染xml页面_Vue的两个版本

Vue.js分为两个版本&#xff0c;简单来说就是一个是完整版vue.js&#xff0c;一个是非完整版vue.runtime.js&#xff1a;1. HTML的书写位置不同完整版&#xff1a;完整版的HTML书写的位置有两个&#xff0c;一个是直接在 *.html 文件中使用 Vue 语法&#xff0c;如下所示&#…

美智库发布报告:《美国在人工智能时代的行动蓝图》

来源&#xff1a;新美国安全中心12月17日&#xff0c;新美国安全中心发布报告《美国人工智能世纪&#xff1a;行动蓝图》&#xff0c;指出先进计算、量子科学、人工智能、合成生物学、5G、增材制造等技术的快速进步正在改变技术运行机制&#xff0c;其中人工智能将产生最广泛的…

四则运算01

编写随机生成30道小学数学题目&#xff1a; 源代码&#xff1a; package test; public class lianxi {String f(){int i (int)(Math.random()*10);int j (int)(Math.random()*10);if(i>j){int temp i;i j;j temp;}return ("("i"/"j")")…

oracle 取时间比较,Oracle最大日期获取方法

在开发应用中如何获取oracle的最大日期呢&#xff1f;本文将提供这样一个获取方法&#xff0c;需要的朋友可以参考下Sql代码复制代码 代码如下:-- Created on 2010/06/08 by NANdeclare-- Local variables hereTYPE t_test IS TABLE OF DATE INDEX BY BINARY_INTEGER;v_test t_…

python与sap_Python结合SAP GUI Script操作sap的简易教程

众所周知&#xff0c;如果要用Python做一些桌面WIN32应用的自动化工作&#xff0c;就需要用到著名的pywin32尤其是其中的win32com.client模块&#xff0c;pywin32的安装不能直接通过pip install方法&#xff0c;奉上pywin32的官方github链接&#xff1a;https://github.com/mha…

2019-2021年中国AI芯片市场预测与展望数据

来源&#xff1a;赛迪顾问预计未来三年AI芯片市场规模仍将保持50%以上的增长速度&#xff0c;到2019年中国AI芯片市场规模将达到124.1亿元。从细分市场结构来看&#xff0c;云端训练芯片的比例仍然最大&#xff0c;但增速最慢&#xff0c;云端推断芯片与终端推断芯片市场在未来…

java. oracle 存储文件,oracle调用java类遍历磁盘文件

利用oracle自带的utl_file包可以访问磁盘文件&#xff0c;但有个限制--无法访问文件夹&#xff1f;什么意思呢&#xff1f;就是说oracle只能访问指定的文件&#xff0c;而不能访问文件夹下的未知文件。所以&#xff0c;如果要通过oracle去遍历某指定路径下的所有文件&#xff0…

python装饰器用法_深入浅出分析Python装饰器用法

本文实例讲述了Python装饰器用法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;用类作为装饰器示例一最初代码&#xff1a;class bol(object):def __init__(self, func):self.func funcdef __call__(self):return "{}".format(self.func())class ita(obje…

python安装(原系统中已有python2)

由于项目中需要使用python3的特征&#xff0c;例如对中文的支持而不使用unicode&#xff0c;虽然一般装系统的时候会带有python2版本&#xff0c;但是还需要重新安装。这里给大家说下&#xff0c;不需要卸载python2&#xff0c;只需要重装python3即可。 下载python3.4&#xff…

总经费8.4亿的上海市脑科学重大专项进展如何?且看2019年度工作汇报会

来源&#xff1a;复旦大学类脑智能科学与技术研究院12月23至24日&#xff0c;上海市“脑与类脑智能基础转化应用研究”市级科技重大专项2019年度工作汇报会在复旦大学召开。中国工程院原常务副院长、中国科学院院士、浙江大学教授潘云鹤&#xff0c;中科院脑科学与智能技术卓越…

路径中有中文怎么解决_时序路径分析

时序路径分析是STA中非常重要的一个部分&#xff0c;任何一条时序路径都是由下面的三条路径构成的&#xff1a;源时钟路径&#xff08;source clock path&#xff09;数据路径&#xff08;data path&#xff09;目标时钟路径 &#xff08;destination clock paths&#xff09;当…

创建启动oracle快捷方式,GNOME3创建连接OracleFS管理软件启动快捷方式

OS&#xff1a;Debian Gnu/Linux 9Java:openjdk version "1.8.0_151"OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-1~deb9u1-b12)OpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)方法&#xff1a;1、通过网页连接OraccleFS&#xff0c;并下载O…

bootstrap table 的简单Demo

暂时够用&#xff0c;不够用再补充 T_T script: <link rel"stylesheet" href"lib/bootstrap.min.css"> <!-- table css--> <link rel"stylesheet" href"lib/bootstrap-table.css"><script src"lib/jquery-1…

设计模式之——工厂模式

一、相关概念了解 首先知晓什么是工厂模式&#xff08;概念&#xff09;&#xff1f; ①实例化对象&#xff0c;用工厂方法代替new操作。②工厂模式包括工厂方法模式和抽象工厂模式。③抽象工厂模式是工厂方法模式的拓展。 其次明白工厂模式的意图 ①定义一个借口来创建对象&am…