首页 > 其他分享 >CF1817E Half-sum 另解与 Trygub Number

CF1817E Half-sum 另解与 Trygub Number

时间:2023-06-16 22:11:25浏览次数:52  
标签:log Trygub sum Number ge 临界状态 复杂度 进位

一题水两篇怎么说。

上一篇中我们采用智慧方法减少了比较次数,避免了使用复杂的高精度数。现在我们有高论!可以做到 \(\mathrm O(\log_B V\log_2 n)\) 在某一位加或者减一个大小 \(\mathrm O(V)\) 的数,支持判断正负和取特定位的值。怎么做呢。很简单,我们每一位的数值域原本是 \([0, B)\),其中 \(B\) 是进制,现在我们改成 \((-B, B)\)。你发现这样一个数的正负性依然只和最高非零位置有关,某一位的具体值,只会受到上一个非零位的退位影响,那么用 set 存一下非零位置即可。在这道题,加的数是 \(5\times 10^8\)。进行一个位的压,那么你可以把 \(V\) 搞到 \(\Theta(B)\),于是单 \(\log\) 就暴力过了这个题。下面证明为啥加减这么快!

考虑当前我们在某一位要加上一个数 \(X\),如果 \(|X| \ge B\) 那么它会除以 \(B\) 下取整以后再被扔到下一位;由于当前位可能有数所以它的大小还可能增加 1,但是由于级数 \(\sum\limits_{i=0}^{\infty}B^{-i}\) 狠狠地收敛,所以 \(|X| \ge B\) 的时候这个增加 1 没有啥存在感。这一部分消耗的复杂度也就是 \(\log_B V\log_2 n\)(后一个 \(\log\) 来自对 set 的操作)。那么考虑 \(|X| < B\) 的时候会发生啥。容易得出你会往前进位,进的数只可能是 \(\pm 1\),单次消耗复杂度是 \(\log_2 n\)。于是一般的时候你就停下来了,但是也有可能不停进位,发生链式反应!也就是当某一位恰好是 \(\pm(B-1)\) 的时候。定义这样的位是“临界状态”位。那么发生一次额外的进位消耗至少一个临界状态的位。于是你考虑均摊分析。什么时候我们会增加临界状态的位呢?容易得出,前面当 \(|X| \ge B\) 的时候每一次都可能增加一个,而在进位过程中,我们顶多在最后一次进位停下来的时候产生一个临界位。所以最后临界位的总个数是均摊 \(\log_B V\) 的。那么均摊复杂度正确,完全胜利!

贴一下 CF 上的原文

标签:log,Trygub,sum,Number,ge,临界状态,复杂度,进位
From: https://www.cnblogs.com/kyeecccccc/p/17486609.html

相关文章

  • CodeForces 1841C Ranom Numbers
    洛谷传送门CF传送门先反转\(s\)串,然后考虑dp,设\(f_{i,j,0/1}\)为考虑了\([1,i]\),前缀最大值为\(j\),是否修改过字符的最大得分。转移讨论是否在这个位置修改即可。时间复杂度\(O(n)\)。code//Problem:C.RanomNumbers//Contest:Codeforces-Educational......
  • CF1817E Half-sum
    题意有一个大小为\(N\)的非负整数集合\(A\),每次你可以从集合中取任意两个数,并将它们的平均数放回序列。不停操作,知道集合最后剩下两个数。请求出这两个数的差的绝对值的最大值对\(10^9+7\)取模的结果。数据范围:\(1\leN\le10^6,0\leA_i\le10^9\)。做法首先给\(A\)......
  • SummerResearch_Log_20230613
    WorkingContent:1.上次的问题得到解决:(1)数据集就是8个文件夹,代表八个类别(忽略注释说的四个类),databloader会为他们分配labels。(2)incrementallearning和backdoor结合是将干净的数据集和被污染的数据集两个任务分别训练。2.基于TyXe的VCL方法终于跑通了,下面是在mnist和cifar数......
  • Leetcode Hot 100 & 560. Subarray Sum Equals K
    参考资料:考点:子串&[题干]1Input:nums=[1,1,1],k=22Output:2这道题说实话看得我一脸懵,第一时间想到的自然是双层循环遍历的一个$O(n^2)$的解法,也就是官方的解法一。但是使用这种解法会超时(Python语言是这样的,评论区有人提到了),我知道会扑该所以直接不......
  • AtCoder Beginner Contest 298 Ex Sum of Min of Length
    洛谷传送门AtCoder传送门挺无脑的。是不是因为unr所以评分虚高啊/qd考虑把\(L_i\toR_i\)的路径拎出来,那么路径中点(或中边)左边的点挂的子树到\(L_i\)更优,右边的点挂的子树到\(R_i\)更优。差分一下,可以转化成\(O(q)\)次询问,每次询问形如\((u,v)\)表示求\(v\)......
  • [ABC162E] Sum of gcd of Tuples (Hard)
    题面翻译给定\(n,k\),求\[\sum^k_{a_1=1}\sum^k_{a_2=1}\sum^k_{a_3=1}\dots\sum^k_{a_n=1}gcd(a_1,a_2,a_3,\dots,a_n)\mod\1000000007\]制約$2\\leq\N\\leq\10^5$$1\\leq\K\\leq\10^5$。思路点拨我们看到这么多\(\gcd\)的式子,我们自然想到莫比乌斯反演......
  • (博弈论)Even Number Addicts
    Alice和Bob正在一个序列 ai​ 上玩游戏,Alice先手,轮流玩。每一轮当前玩家可以取走序列中任意一个数,直到取完。如果最后Ailce取走的数的和为偶数,则Ailce赢,否则Bob赢。保证每个人用最优策略玩。对于每组数据,输出赢家。输入输出样例输入#1复制4313541357......
  • mysql-主从数据一致性检查工具 pt-table-checksum
    pt-table-checksum工具介绍pt-table-checksum是PerconaToolkit的一个组件,用于检测MySQL主、从库的数据是否一致。它的原理是在主库执行基于statement的SQL语句来生成主库数据块的checksum,把相同的SQL语句传递到从库执行,并在从库上计算相同数据块的checksum,最后,比......
  • Java8-Consumer的使用场景
    Java8的Consumer比较抽象。结合几个例子来看看常用的使用场景有以下几个:把方法作为函数的入参Java8中可以使用Consumer来实现在函数的入参中传递方法,这个如果熟悉js的话可能会比较好理解一些。在某些情况下,不能直接使用某个对象的方法,需要把方法传递到另一个函数里面去执行,那么......
  • java如何往List<? extends number>中加入元素?体会范型集合父子关系以及范型通配符的使用
    以下来自一个stackoverflow的一个问答,写的很清楚。基本上就是子类集合的引用付给父类引用,如果父类的引用变量声明的是<?extendsParent>,则父类引用变量只能对集合进行读操作,读出来的变量是Parent类型,这是因为不确定该父类引用变量指向的是什么类型的集合,可以是Child1,也可以C......