2018 年“三盟科技杯”中国大学生程序设计竞赛(湖南)

2018 年“三盟科技杯”中国大学生程序设计竞赛(湖南)

A. Easy h-index

题目描述:给出一个数组(a_i),求最大的(h),使得至少有(h)个数不少于(h)

solution
模拟。

时间复杂度:(O(nlogn))

B. Higher h-index

题目描述:写论文,当一份论文花费了(x)小时时,这份论文会得到(ax)个引用,(a)是给定的常数,(x)必须为正整数,每份论文都可以被之后自己写的论文引用,现在有(n)个小时写论文,求最大的(h),使得至少有(h)份论文得到的引用个数不少于(h)

solution
(n leq a)时,答案为(n)
(n > a)时,若要使答案为(h),则采取贪心策略:每份论文只用一个小时,要保证前(h)份论文的引用个数不少于(h),则(h-a+h leq n),所以(h_max=frac{1}{2}(a+n)>n),所以最终答案为(frac{1}{2}(a+n))

时间复杂度:(O(1))

C. Just h-index

题目描述:给出一个数组(a_i),每次询问一个区间([L, R]),求最大的(h),使得([L, R])内至少有(h)个数不少于(h)

solution
可持久化线段树。

时间复杂度:(O(qlogn+nlogn))

F. Sorting

题目描述:给定(n)个三元组((a_i, b_i, c_i)),求一个字典序最小的排列(p_i),使得

[frac{a_{p_{i-1}}+b_{p_{i-1}}}{a_{p_{i-1}}+b_{p_{i-1}}+c_{p_{i-1}}}leqfrac{a_{p_i}+b_{p_i}}{a_{p_i}+b_{p_i}+c_{p_i}} ]

solution
按题目要求排序。
时间复杂度:(O(nlogn))

G. String Transformation

题目描述:给定两个字符串(S, T)(S, T)由'a, b, c'组成,可以对字符串(S)进行操作,每次删除或插入'aa', 'bb', 'abab',问(S)是否能变成(T)

solution
操作中没有'c',也就是说可以以'c'为间隔拆分字符串,通过手工计算,可以知道字符串中的'ab', 'ba'可以互相替换,因为'ab'->'abaa'->'ababba'->'ba',反过来'ba'就可以变成'ab',所以只要每一段的'a', 'b'的数目的奇偶性分别相等,则(S)可以变成(T)

时间复杂度:(O(n))

I. Longest Increasing Subsequence

题目描述:给定一个数列(a_i leq n),设(f(x))表示将数列里的(0)替换成(x)后,最长严格上升子序列的长度,求(sum_{i=1}^n if(i))

solution
显然,(f(x))要么等于原最长严格上升子序列,要么加一。所以只需要求出哪些数能让答案加一即可。所以先预处理出原序列的最长严格上升子序列,若(i)(j)是最长严格上升子序列的相邻两位,且(i)(j)之间有(0),则([a_i+1, a_j-1])内的数能使答案加一。这个可以从左到右扫一遍,然后记录最长严格上升子序列的某一位的最小的数是什么即可(这个数的位置的右边必须有(0)

时间复杂度:(O(nlogn))

J. Vertex Cover

题目描述:给出一个(n)个点的完全图,编号为(0)~((n-1)),点权为(2^i)。开始时(A)选定若干条边,然后(B)选择若干个点来覆盖这些边(每条边的端点至少有一个被选),(B)选的点的点权是最小的。求出(A)有多少种选择方案使得(B)的点权和为(k)

solution
一个点能被(B)选上,必定是这个点与另一个点权比它大的点的连边至少有一条被选上,而且该点与比它小的点的连边都没有被选上。按照这个即可算出答案。

时间复杂度:(O(n))

K. 2018

题目描述:给定(a, b, c, d),求出满足(aleq x leq b, cleq y leq d, xy=2018)的数对((x, y))的个数。

solution
容斥原理。

时间复杂度:(O(1))

原文地址:https://www.cnblogs.com/GerynOhenz/p/9095201.html