CF1817E Half-sum
题意
有一个大小为 \(N\) 的非负整数集合 \(A\),每次你可以从集合中取任意两个数,并将它们的平均数放回序列。不停操作,知道集合最后剩下两个数。请求出这两个数的差的绝对值的最大值对 \(10^9+7\) 取模的结果。
数据范围:\(1\le N\le 10^6, 0\le A_i\le 10^9\)。
做法
首先给 \(A\) 排序,最后一定会把一个前缀合并到一个数里,剩下的后缀合并到另一个数里。合并顺序可以改变不同的数所占比例。贪心地思考,容易得出对于前缀一定是从后往前合并,对于后缀一定是从前往后合并。也就是假设 \(A_{1\dots k}(1<k<n)\) 合并到一起,那么 \(A_i(1\le i < k)\) 的系数是 \(2^{-i}\),\(A_j(k+1 < j\le n)\) 的系数是 \(2^{-(n-i+1)}\)。中间两个数比较特殊,\(A_k\) 系数是 \(2^{-(k-1)}\),\(A_{k+1}\) 的系数是 \(2^{-(n-k-1)}\)。
你发现直接枚举 \(k\) 去计算答案,这是不好做的,因为精度不够,你最后输出结果是取模的,必须绝对精确。你当然可以写二进制高精度数,然后你会发现你不能支持 \(\log A\) 加减的同时 \(\log A\) 比较,除非去写线段树之类;总之这不是上策。
那么怎么办呢?考虑边界从 \(p\) 移动到 \(q(q>p)\) 的时候答案的变化量(设 \(D_i = A_{i+1} - A_i\)):
\Delta_{p,q} &= \sum\limits_{i = p}^{q-1}\frac{A_i}{2^i}-(\frac{A_{i+1}}{2^i}+\frac{A_{i+1}}{2^{n-i-1}})+\frac{A_{i+2}}{2^{n-i-1}}\\
&= \sum\limits_{i = p}^{q-1}\frac{D_i}{2^i}-\frac{D_{i+1}}{2^{n-i-1}}\\
&= \frac{D_p}{2^p} - \frac{D_q}{2^{n-q}} + \sum\limits_{i = p+1}^{q-1}(\frac1{2^i} - \frac1{2^{n-i}})D_i
\end{align*}
\]
你发现一个事情叫做,下面的 2 的次数相差很大,而你给定的数值域只有 \(10^5\),那有一些东西是显然不优的。比如说当 \(q \le \dfrac{n-32}2\) 的时候,如果存在一个 \(p < q\) 使得 \(D_p > 0\),那这个 \(q\) 就直接没用了。后半部分同理。于是你只需要无条件计算出中间三十个,然后寻找左半部分和右半部分第一个 \(D_i > 0\) 的位置计算出来即可。于是你可以 \(\Theta(n)\) 去计算高精度数,全部算好以后暴力进位,并一位一位和当前最优解比较。这样时间复杂度是 \(\Theta(n\log V)\)。啥都不用写,很赚。
CF1817E Half-sum的更多相关文章
- LeetCode - Two Sum
Two Sum 題目連結 官網題目說明: 解法: 從給定的一組值內找出第一組兩數相加剛好等於給定的目標值,暴力解很簡單(只會這樣= =),兩個迴圈,只要找到相加的值就跳出. /// <summa ...
- Leetcode 笔记 113 - Path Sum II
题目链接:Path Sum II | LeetCode OJ Given a binary tree and a sum, find all root-to-leaf paths where each ...
- Leetcode 笔记 112 - Path Sum
题目链接:Path Sum | LeetCode OJ Given a binary tree and a sum, determine if the tree has a root-to-leaf ...
- POJ 2739. Sum of Consecutive Prime Numbers
Sum of Consecutive Prime Numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20050 ...
- BZOJ 3944 Sum
题目链接:Sum 嗯--不要在意--我发这篇博客只是为了保存一下杜教筛的板子的-- 你说你不会杜教筛?有一篇博客写的很好,看完应该就会了-- 这道题就是杜教筛板子题,也没什么好讲的-- 下面贴代码(不 ...
- [LeetCode] Path Sum III 二叉树的路径和之三
You are given a binary tree in which each node contains an integer value. Find the number of paths t ...
- [LeetCode] Partition Equal Subset Sum 相同子集和分割
Given a non-empty array containing only positive integers, find if the array can be partitioned into ...
- [LeetCode] Split Array Largest Sum 分割数组的最大值
Given an array which consists of non-negative integers and an integer m, you can split the array int ...
- [LeetCode] Sum of Left Leaves 左子叶之和
Find the sum of all left leaves in a given binary tree. Example: 3 / \ 9 20 / \ 15 7 There are two l ...
- [LeetCode] Combination Sum IV 组合之和之四
Given an integer array with all positive numbers and no duplicates, find the number of possible comb ...
随机推荐
- Perceptron, Support Vector Machine and Dual Optimization Problem (3)
Support Vector Machines Perceptron and Linear Separability 假设存在一个 linear decision boundary,它可以完美地对 t ...
- R语言文本数据挖掘(三)
文本分词,就是对文本进行合理的分割,从而可以比较快捷地获取关键信息.例如,电商平台要想了解更多消费者的心声,就需要对消费者的文本评论数据进行内在信息的数据挖掘分析,而文本分词是文本挖掘的重要步骤.R语 ...
- Oracle宕机之PMON (ospid: 248987): terminating the instance due to error 484(另附hugepage配置方法)
数据库版本:11.2.0.4 RAC环境 操作系统版本:Asianux Server release 7.3 数据库报错分析 接到业务消息,应用无法访问,开发人员查看日志后发现无法连接数据库. 查看数 ...
- SSM整合的所有配置(配置文件)
mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE co ...
- Rust中的into函数和from函数
1.Rust中的into函数和from函数是做什么用的? into函数是Rust语言中的一个转换函数,它属于Into trait.它可以将一个类型转换为另一个类型.实现了From trait的类型会自 ...
- nginx概要
新机(CentOS7)配置nginx: 一. 更新yum源为阿里云镜像 ping mirrors.aliyun.com mv /etc/yum.repos.d/CentOS-Base.repo /et ...
- Cesium加载ArcGIS Server4490且orgin -400 400的切片服务
Cesium在使用加载Cesium.ArcGisMapServerImageryProvider加载切片服务时,默认只支持wgs84的4326坐标系,不支持CGCS2000的4490坐标系. 如果是A ...
- Prism Sample 22-ConfirmCancelNavigation
导航到一个视图,如果在离开这个视图时需要确认,在VM中实现以下接口 public class ViewAViewModel : BindableBase, IConfirmNavigationRequ ...
- 用Python语言进行时间序列ARIMA模型分析
应用时间序列 时间序列分析是一种重要的数据分析方法,应用广泛.以下列举了几个时间序列分析的应用场景: 1.经济预测:时间序列分析可以用来分析经济数据,预测未来经济趋势和走向.例如,利用历史股市数据和经 ...
- flutter系列之:做一个修改组件属性的动画
目录 简介 flutter中的动画widget AnimatedContainers使用举例 总结 简介 什么是动画呢?动画实际上就是不同的图片连续起来形成的.flutter为我们提供了一个Anima ...