Codeforces Round #434 (Div. 2)
刚好时间对得上,就去打了一场cf,发现自己的代码正确度有待提高。
A. k-rounding
题目描述:给定两个整数(n, k),求一个最小整数(x)使得,(x)既是(n)的倍数,也是(10^k)的倍数。
solution
首先判断(n)是不是(10^k)的倍数,如果是就可以直接输出了。
如果不是,就算出(n)有质因子(2)多少个,质因子(5)多少个,如果(2)比较少,那就乘(2),否则乘(5),直到它们的个数相等(或者(n)已经是(10^k)的倍数),如果(n)依然不是(10^k)的倍数,那么就乘(10),直到是(10^k)的倍数为止。
时间复杂度:(O(k))
B. Which floor?
题目描述:有一栋楼,每层有相同数量的房间,房间从一楼开始从1开始编号。给出(m)条信息(一条信息为第几个房间在第几层),问能否确定第(n)个房间在哪一层。
solution
(n)比较小,所以可以枚举一层有多少个房间,然后检查一下是否满足那(m)个信息,如果满足,则出现一个答案,最后判断是否有多个答案即可。
时间复杂度:(O(nm))
C. Did you mean...
题目描述:给出一个只由小写字母组成的字符串(st),如果(st)的一个子串满足:
1、子串长度大于等于3
2、子串的所有字符都是辅音字母
3、子串至少有两种不同的字母
那么这个子串就叫作typo
现在要在(st)中插入最少的空格使得分开的每一段都没有typo
solution
找出从左到右第一个typo,假设该子串为(st(i, j)),那么就在(j)前面插入一个空格,然后从(j)开始继续找第一个typo,重复上述步骤直到结束
时间复杂度:(O(length(st)))
D. Polycarp's phone book
题目描述:给出(n)个九位数,给每一个九位数找一个最短的特征子串,使得该子串不是其它九位数的子串。
solution
求出出每个九位数的每个子串在多少个九位数中出现,若只出现了一次,那么这个子串就是特征子串
时间复杂度:(O(81n))
E. Tests Renumeration
还没想到。。。
F. Wizard's Tour
题目描述:给出一个没有自环和重边的图,找出尽量多的((x, y, z))三元对,满足(x, y)有边相连,(y, z)有边相连,而且每条边只能属于一个三元对,输出最多的数量以及方案。
solution
这题是构造解。
先随便找一个点做根,然后构成一棵树(当然是有环的),算出每个点的深度,然后从深度大的开始枚举,假设当前点为(i),然后找出(i)所连向的点((j))并且(j)的深度大于等于(i)的深度,而且(i, j)之间的边没有被选过,然后将这些点两两配对,如果还剩下一个而且(i)不是根,那么(i)的父亲,(i),以及剩下的这个点可以组成一个三元对。
时间复杂度:(O(n))