Codeforces #345 Div.1
Codeforces #345 Div.1
打CF有助于提高做题的正确率。
Watchmen
题目描述:求欧拉距离等于曼哈顿距离的点对个数。
solution
签到题,其实就是求有多少对点在同一行或同一列。
时间复杂度:\(O(nlogn)\)
Image Preview
题目描述:给定看一张照片的时间,翻页的时间,把图片翻转的时间。一开始屏幕显示第一张照片,可以向左或向右翻,不能跳过还没有看过的图片,方向不对的图片要先翻转再看,看过的不消耗翻转时间与看照片时间,问在一定时间内,最多能看多少张照片。
solution
易得只会转向一次,即开始时向左翻,然后向右翻,或者一开始向右翻,然后向左翻。部分和处理一下就可以了。
时间复杂度:\(O(nlogn)\)
Table Compression
题目描述:给出一个矩阵,求另一个矩阵,使得这个矩阵的同一行和同一列的数的大小关系一致,并使这个矩阵的最大值最小,输出这个矩阵。
solution
如果没有相同的数字,那么将每一行每一列分别排序,然后连边,求每个点的最长路径即可。如果有相同数字,就要用并查集来维护这些在同一行同一列相同的数字,再做最长路径。
时间复杂度:\(O(nlogn)\)
Zip-line
题目描述:给出一个序列,每次修改其中的一个数,求序列最长严格上升子序列,每次修改是单独的,即修改后会还原。
solution
用线段树维护原序列的最长上升子序列(正反)。
答案有两种情况:
1、修改后的数在最优子序列中,这时答案为(正向最大+反向最大)线段树求。
2、修改后的数不在最优子序列中,所以答案应该是原序列的最长上升子序列或次长序列。问题转化为该位置是否在原序列的所有最优解中,是则答案为原序列最优解减一,否则为最优解。
这个问题可以通过先求原序列最优解,然后看最优解序列的某一位是否是唯一的位置,如果是,该位置则是一定出现在所有最优解中,否则反之。
时间复杂度:\(O(nlogn)\)
Clock Bomb
题目描述:给出一棵树,现在要把它变成另一种形态,操作为删掉一条边,再加一条边,此过程中不能出现有环(包括自环),输出操作方案。
solution
这题还没想出怎么做,但删去一条边后就会把树分成两部分,而后来加上去的边一定要在这两部分之间相连。