码迷,mamicode.com
首页 > 其他好文 > 详细

两道趣题

时间:2019-10-01 16:00:08      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:规律   就是   根据   rac   结束   相等   为什么   max   线性   

好吧,估计以后会觉得这两道题很沙雕,但我现在实在太菜了……


pro.1 给定\(n\),求$ \sum\limits_{i = 1}^n {\left[ {\frac{n}{i}} \right]} $,数据范围\(1 \leqslant n \leqslant 10^{12}\)

首先\(O(n)\)肯定凉了,所以得找规律(又是找规律,害怕.jpg
根据 看std 手模与观察,可以发现在一段区间内的值是相等的,最明显的就是在\(\left[ {\frac{n}{{n/2}}} \right]\)之后所有的值都是\(1\),从这里入手,进一步发现连续为同一个值的个数为\(\left[ {\frac{n}{{[n/i]}}} \right]-i+1\)个,于是我们便可以在接近\(O(\log n)\)的复杂度内求解之。
在考场上,想到这里一般这道题就结束了,但我不禁还是要刨根问底一下,为什么是这样呢?毕竟如果每次总凭借直觉来做题是没有多大提高的。
其实(这词用得好像我一下就想出来了一样2333),在每次求得一个商\([n/i]=d\)时,我们实际上是在回答这样一个问题:“在\(n\)中有多少个\(i\)?(当然答案是\(d\))”,但是我们要求的东西却是:“有多少个连续的\(d\)?”首先我们知道,在\(n\)中最多有\([n/d]\)\(d\),但是在\(i\)之前有比\(d\)更大的商,所以要把比它大的个数减去,而这个个数刚好是\(i-1\)个,于是答案便呼之欲出。


pro.2 给定\(n\),数列\(\{ {a_n}\}\)与区间\([minb,maxb]\),使得方程\(\sum\limits_{i = 1}^n {{a_i}{x_i}} = b\)有非负整数解,其中\(b \in [minb,maxb]\)。数据范围:\(n \leqslant 12,a_i \leqslant 5 \times 10^5,1 \leqslant minb \leqslant maxb \leqslant 10^{12}\)

这题是真的毒瘤,一开始还在想什么高斯消元和线性筛之类的东西……

两道趣题

标签:规律   就是   根据   rac   结束   相等   为什么   max   线性   

原文地址:https://www.cnblogs.com/wzzyr24/p/11615386.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!