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)\)