题目

题目描述
有 nnn 个计算器,它们构成了一棵树。每个计算器有两个参数 (a,b)(a,b)(a,b),如果你输入 xxx,计算器就会输出 ax+bax+bax+b 。

现在你需要选一条从根到叶子的链,设它们分别为 u1,u2,…,uku_1,u_2,\dots,u_ku1​,u2​,…,uk​,你会把 111 输入 u1u_1u1​,然后把 u1u_1u1​ 的输出输入 u2u_2u2​,以此类推,最后把 uk−1u_{k−1}uk−1​ 的输出输入 uku_kuk​,得到一个输出。

你需要最大化这个输出。注意本题不取模

保证参数 a,ba,ba,b 都是在给定范围内均匀随机的。但是树不是随机的

数据范围与提示
对于所有数据,保证 a,ba,ba,b 在 [1,9][1,9][1,9] 内均匀随机,1≤n≤5×1051≤n≤5\times 10^51≤n≤5×105 。

最终答案可能很大。请老老实实输出它。

思路

保证参数 a,ba,ba,b 都是在给定范围内 随机 的。

好,确认是乱搞题。目前已经得知的乱搞方法如下:

  • 认为 a,ba,ba,b 的位数都与计算器数量同阶。进而,一个点只需要保留它的长链(与稍短一些的链)。
  • 认为深度较大的计算器的 bbb 没啥用。即,深度较大时直接比较 aaa 来判断优劣。
  • 认为 aaa 的最高位很容易不同。所以只保留 aaa 的前几位,再存一个位数即可。

然后题解来了。利用的是第三条。具体一点是,直接用 double\tt doubledouble 进行科学计数法。

找到最优的叶子节点之后,再用分治 +++ FFT\tt FFTFFT(话说 NTT\tt NTTNTT 不是更好吗)求答案。

O(nlog⁡2n)\mathcal O(n\log^2n)O(nlog2n),瓶颈是最后的计算,考虑压位来节约常数。

后记

说了没有代码就是真的没有,请不要再有更多期待了。

考场上的想法是,利用前两条,长链剖分 搞一下。先递归长儿子,得到一个值,然后看其他的子节点:如果其长链长度过短,就放弃。否则递归,用 O(Llog⁡2L)\mathcal O(L\log^2L)O(Llog2L) 的分治 +++ NTT\tt NTTNTT 算出长链的答案(这个 LLL 既是短链长度,又是长链长度),然后比较答案。

怎么处理深度比较小的计算器呢?考虑将深度不超过 MMM 的全部去除,剩下的就可以合理使用长剖了。它们可以用 O(nM)\mathcal O(nM)O(nM) 暴力乘法得到。然后判断答案。如果一个点的长链长度是 LLL 就会用 O(ML)\mathcal O(ML)O(ML) 暴力乘法,但是 ∑L=n\sum L=n∑L=n 所以不超过 O(nM)\mathcal O(nM)O(nM) 。

反正不影响复杂度,就取 M=log⁡2nM=\log^2 nM=log2n 呗。此时总复杂度
O(nlog⁡2n)\mathcal O(n\log^2 n) O(nlog2n)

可是它的正确性有多高?算法复杂度常数又有多大?没有注意到的细节又有多少?总而言之,在考场上我并没有去这样打。或许我真该放手一搏。或许我应当急流勇退。

[ZROI1788]计算器相关推荐

  1. 怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...

    话不多说,首先先看效果图,它能够记录你在使用过程中的历史,方便你查看是否有错: 接下来就仔细分析一下是如何制作的: 简易计算器 第一步:导入资源库 在过程中使用到了tkinter这个资源库,win+R ...

  2. java体重指数计算器程序_java 学习 ——计算器小程序

    简易计算器小程序代码: package jisuanqi; //声明需要插入的包 import java.awt.*; import java.lang.Object; import java.lan ...

  3. c语言计算器实训任务案例,C/C++经典实例之模拟计算器示例代码

    前言 本文主要给大家介绍了关于利用C/C++如何实现模拟计算器的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. Problem Description 简单计算器模拟:输入 ...

  4. 用计算机计算教学反思,《用计算器计算》教学反思

    <用计算器计算>教学反思 身为一名刚到岗的人民教师,教学是重要的工作之一,写教学反思能总结我们的教学经验,写教学反思需要注意哪些格式呢?下面是小编为大家整理的<用计算器计算>教 ...

  5. pythontkinter真实的例子_python小实例——tkinter实战(计算器)

    相关学习视频:Python Tkinter 绘图项目 - 网易云课堂​study.163.com import tkinter import math import tkinter.messagebo ...

  6. LabVIEW做一款科学计算器

    目录 1.设计思路 2.功能设计 最近学习LabVIEW基础知识,使用其制作一款简易科学计算器,可以实现基本的数学运算功能,效果如下所示: 下载链接:LabVIEW实现科学计算器-嵌入式文档类资源-C ...

  7. 数据结构与算法(3-1)栈(顺序栈、两栈共享空间、链栈、栈的计算器)

    目录 一.顺序栈 存储结构 总代码 二.两栈共享空间 存储结构: 总代码: 三.链栈 存储结构: 总代码: 一.顺序栈 存储结构: 栈特点:先进后出,后进先出.(特殊的线性表) 入栈时在栈顶添加元素, ...

  8. 【机器视觉案例】(5) AI视觉,远程手势控制虚拟计算器,附python完整代码

    各位同学好,今天和大家分享一下如何使用MediaPipe+Opencv完成虚拟计算器,先放张图看效果.FPS值为29,食指和中指距离小于规定阈值则认为点击按键,为避免重复数字出现,规定每20帧可点击一 ...

  9. QT学习第8课:QT计算器界面实现

    声明:此文章仅是个人在学习狄泰QT课程所做的笔记,文章中包含狄泰资料的,一切版权归狄泰软件所有! 第8课是来做一个计算器界面,只是一个界面显示.不过也是挺兴奋的,以前一直对着黑框框,现在终于到界面了. ...

  10. 个人所得税计算器2016 by Jacksile

    个人所得税计算器2016 个人所得税计算器2016 税前薪资: 元 各项社会保险费: 元 起征点: 35004800元 应缴税款: 元 实发薪资: 元 个人所得税计算公式 应纳税额 = 应纳税所得额 ...

最新文章

  1. Java 抽象方法和抽象类基础知识
  2. 【PAT甲级 TreeMap的使用】1002 A+B for Polynomials (25 分) Java版 6/6通过
  3. resnet50能用cpu跑吗_2020年12月1日更新。性价比最高入门游戏CPU--intel 10100F装机配置推荐。...
  4. JavaEE规范与系统结构
  5. HTML5教程:1.3 HTML 5的使用理由和待解决问题
  6. android 4 动画,[Android]开发App,你得知道这些4——动画
  7. qt传递数组给js(支持多组)
  8. 现代书法脚本字体Tifany Script
  9. c语言中指数常量注意什么意思,C语言入门知识:常量
  10. 其他——SPSS做线性回归分析最好的例子
  11. JS - 事件循环机制(Event Loop)
  12. 程序输出我是java小公主,我的同学英文
  13. 征信的用途以及提升途径
  14. jwt token使用autho0-jwt框架使用(二)
  15. 【Opencv】无损保存png图片,JPG始终有损
  16. POJ 2671 Jimmy's Bad Day ★ (区间DP)
  17. 三下乡辅导孩子计算机知识,【“三下乡”社会实践活动】计算机学院——每个课程,都是你我成长的故事...
  18. 项目十二做好计算机维护,电脑组装与维护教学课件 项目十二 电脑组装和维护进阶.ppt...
  19. iOS开发Xcode7免费真机调试教程
  20. 2D转换模块-相片墙

热门文章

  1. raid服务器怎么装win7系统安装,安装win7系统时怎么加载SATARAID驱动
  2. GBD+XGBOOST算法原理深入解析
  3. Ubuntu18.04设置自动连接WIFI
  4. Predicting Human Mobility via Graph Convolutional Dual-attentive Networks
  5. 量化派周灏:从物理博士到科技公司 CEO,不变的是“格物致理”...
  6. 领导合影站位图_领导主席台座次安排图解:政务礼仪
  7. layui table 渲染动态列及列数据
  8. c++ 序列化库iguana使用总结
  9. php strpos ctf,CTF php代码审计 strpos()函数漏洞 XXE漏洞xinclude()
  10. python类和对象的应用:烤地瓜