HBC15611吉姆的奇思妙想题解 (吉姆是i热爱算法的人)

坐在坟头思考人生 自定义函数 64 0
题库丰富多样,涵盖各个领域,全网最全C++题库,让您在练习中不断成长!
这就和 与 两种方法的执行时间的常系数有关了, 于是,吉姆为了透彻了解这个问题,就假定 和 的常系数分别是a 与b,这意思是:对于一个度数为d 的点,若使用,程式的执行时间和a×d2 成正比;若使用,程式的执行时间则和b×M 成正比, 对于一个给定的图,吉姆想要知道对于不同的 a,b,s 的值要取多少比较好,并且求出 s 为该值时程式所需的执行时间!

吉姆是个热爱算法竞赛的小朋友,平常的休闲活动就是刷 牛客网 的题目。 当吉姆刷到 wannafly挑战赛12 F.小H和圣诞树  这题时,颇为震惊,因为这是他第一次在wannafly挑战赛上看到作者提供的解答的时间复杂度的式子里含有根号的题目,于是吉姆就开始在网络上搜寻拥有类似时间复杂度解法的问题,并且看到了以下这题: 给你一个有 N 个点 M 条边的无向简单图,请算算此图中有几个三角形。我们称无序的三个点 x,y,z 为三角形,若且唯若 (x,y)、(y,z)、(x,z) 都是此图上的边。 吉姆 想了这个问题七天七夜后,他发现了一件事情: (1) 对于任一个度数为 d 的点,我们可以用 O(d2) 的时间复杂度来计算有多少三角形包含这该点。 吉姆 又想了这个问题七天七夜后,他又发现了一件事情: (2) 对于任一个点,我们可以用 O(M) 的时间复杂度来计算有多少三角形包含该点。 吉姆又再想了这个问题十四天十四夜后,他忽然想到: (3) 不如就把 (1) 和 (2) 的算法结合在一起!找一个恰当的整数s 若一个点度数小于等于s,就使用(1),否则就使用(2),经过缜密的时间复杂度分析,发现这么做的时间复杂度会是O(M×s+M2s)O( M times s + frac{M^2}{s})O(M×s+sM2​),取s=Ms = sqrt{M}s=M​ ,时间复杂度就会是O(M×M)O(M times sqrt{M})O(M×M​)。最后再把包含各个点的三角形数全部加起来再除以 3 就是答案了! (因为每个三角形会被算到三次。) (此时间复杂度的详细证明会在今天的题解中解说唷~) 但这个 s 的值究竟要设为多少呢?这就和 (1) 与 (2) 两种方法的执行时间的常系数有关了。 于是,吉姆为了透彻了解这个问题,就假定(1) 和(2) 的常系数分别是a 与b,这意思是:对于一个度数为d 的点,若使用(1),程式的执行时间和a×d2 成正比;若使用(2),程式的执行时间则和b×M 成正比。 对于一个给定的图,吉姆想要知道对于不同的 a,b,s 的值要取多少比较好,并且求出 s 为该值时程式所需的执行时间! 在这个问题里,我们不会真的给你一个图,只会告诉你边数 M。并对于所有正整数 d,告诉你度数为 d 的点有几个。甚至,题目里给你的图不一定实际上存在的简单图(意即输入可能不是一个合法的简单图的度序列)。 大家好,以上是题目背景。(哈哈哈哈哈嚯嚯嚯嚯~) 给你两个正整数 M, L, 以及两个长度为 L 个正整数序列 deg1,deg2,..., degL 和 freq1, freq2,..., freqL。 (degi 和 freqi 对应到 Background 里提到的问题的意思就是:度数为 degi 的点 有 freqi 个。) 你要回答 Q 个问题,第 i 个问题会给你 2 个正整数 ai, bi,请找到一个整数 s 使得以下式子(Ei) 的值最小: (此式就是 Background 里提到的程式执行时间的估计函数) Ei=ai×∑1 ≤ j ≤ L, degj≤s(degj2×freqj)+bi×∑1 ≤ j ≤ L, degj>s(M×freqj)E_i = a_i times sumlimits_{1 le j le L, deg_j le s}(deg_j^2 times freq_j) + b_i times sumlimits_{1 le j le L, deg_j > s}(M times freq_j)Ei​=ai​×1 ≤ j ≤ L, degj​≤s∑​(degj2​×freqj​)+bi​×1 ≤ j ≤ L, degj​>s∑​(M×freqj​)

HBC15611吉姆的奇思妙想题解
(吉姆是i热爱算法的人)-第1张图片-东莞河马信息技术
(图片来源网络,侵删)
成为编程大师,不再是梦想!全网最全C++题库,助您开启编程新篇章。

标签: HBC15611吉姆的奇思妙想题解