2018 Multi-University Training Contest 2

2018 Multi-University Training Contest 2

题解

C - Cover

题目描述:给定一个图(不一定联通),用最少的的欧拉路径或欧拉回路覆盖,输出方案。

solution
一个个联通块处理,对于一个联通块(如果只有一个点,那就可以忽略了),一定有偶数个度数为奇数的点(设为(k)个),将这些点每两个配对连边,走一次欧拉回路,然后将这些边删掉,就可以分成(max(k/2, 1))路径,而这就是最优的。

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

D - Game

题目描述:在集合里有(n)个元素((1)~(n)),两个人玩游戏,每次从集合里面选一个数,然后将他的所有约数从集合里删掉,谁不能选数,谁就输。问先手是否必胜。

solution
(1)是一个非常特殊的数,因为无论删什么数,都会删(1)。如果先手不删(1)有必胜策略,则必胜,如果必败,则删(1),把败局扔给后手,必胜,所以先手必胜。

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

E - Hack It

题目描述:有一个(n imes n)的方阵,每一个是(0)(1),现在有一个算法来判断这个方阵是否存在一个子矩阵,它的四个角都是(1),所在要构造一个(n leq 2000)的方阵,使得里面有至少(85000)(1),但满足条件的子矩阵不存在。

solution
(n=p^2,p)是质数,这里(p=47),然后这个方阵由(p^2)(p^2)的方阵组成,现在要填数进去,使得任意两行至多只有一列都有(1)
对于(k, b, i<p, a[kp+b][ip+(ki+b)\%p]=1)
(k_1 eq k_2),假设(ip+(k_1i+b)\%p=ip+(k_2i+b)\%p)(不可能左边是(i),右边是(j)),判断是否存在(j)也满足等式,假设(jp+(k_1i+b)\%p=jp+(k_2i+b)\%p),两式相减,则
((i-j)k_1=(i-j)k_2 (modp)),因为(p)是质数,且(k_1 eq k_2),因此等式不成立,所以不存在(j)也满足等式,即没有两列同有(1)
因此这种构造是对的,只要取前(2000 imes 2000)的矩阵即可。

时间复杂度:(O(p^4))

F - Matrix

题目描述:有一个(n imes m)的矩阵,每个格子要么是黑色,要么白色,问有多少种方案使得至少有(A)行黑色,(B)列黑色。

solution

这个题解说得挺详细的,但按着那里说的貌似答案不对。

G - Naive Operations

题目描述:给定一个(n)排列(B),有一个长度为(n)的序列(A),初始全都为(0),现在有两种操作:1、给(A)的一个区间全部加(1),2、询问一个区间的(left lfloor frac{a_i}{b_i} ight floor)的和

solution
有两种做法:
1、用线段树维护对于区间([L, R]),要加多少次(1)才能使区间里的一个数的答案加(1),一旦存在就从该点往下更新答案。

2、离线处理所有的加操作,按左端点从小到大排序,用线段树求出每个位置的数在哪里次加操作后答案加一,然后再按时间顺序进行正常操作。

时间复杂度:(O(nlog^2n))

J - Swaps and Inversions

题目描述:对一个序列进行操作,操作后的总花费为序列的逆序对个数乘(x),而进行一次操作需要花费(y),操作是交换相邻两个数。

solution
交换相邻两个数可以消除一个逆序对,因此答案等于逆序对个数乘(min(x, y))

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

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