Codeforces Round #620 (Div. 2)题解
前言
被(WhiteCmile)带飞了.(
A. Two Rabbits
题意
你现在有两只兔子,一个在(x),一个在(y),一个一次能跳(a),另一个一次能跳(b),只能往另一只兔子的原位置的方向跳.问这两只兔子能否相遇.
Solution
直接判断(|x-y|)能否被(a+b)整除即可.
Code
B. Longest Palindrome
题意
你现在有(n)个长度为(m)的串,你可以选择删除其中的一些串,然后将剩下的串任意组合在一起,使得它是回文串.求最长的回文串的长度.
Solution
直接(n^2)的求出每一个串的回文串,然后匹配即可.
注意到每一个串有且仅有一种本质的回文串,所以随便匹配即可,注意特判一个串回文的情况.
Code
C. Air Conditioner
题意
你现在有一个初始数字(x),你在一个单位时间内可以给(x o x-1,x o x, x o x+1).存在一些时间点((t,l,r)),要求满足当时间为(t)的时候有(x in [l,r]).
试求是否存在一种方案使得所有条件都满足.
Solution
考虑直接将能够到达的区间用([L,R])表示,然后直接判断是否存在交之后取交即可.
Code
D. Shortest and Longest LIS
题意
要求你构造出两个排列,满足给定的不等式关系,第一个要求(LIS)最短,第二个要求(LIS)最长.
Solution
考虑(<)可以连出一个(top)关系图,考虑最长显然就是从前往后把所以的点拓扑排序,最短的就是从后往前(topsort).
然后这样子输出即可.
Code
E. 1-Trees and Queries
题意
给你一棵树,每一次询问((a,b,x,y,k))表示新加一条双向边((x,y)),问从(a)走到(b)是否存在一种恰好走(k)条路的方法.可以重复经过一条边和一个点.
Solution
比较简单的题目,我觉得作为一场(Div1)的(B)题来说过水.
直接判断长度和奇偶性即可.
分三种情况:
- 直接走.
- 用这条((x,y))边.
- 走((x,y))这个环.
然后直接随便求一下距离即可.
Code
F. Animal Observation
两道题目放一起了.
题意
给你一个(n*m)的矩阵,你在每一行可以选择一个(2*k)的矩形覆盖(i)和(i+1)行,特殊的是,当(i=n)时只覆盖第(n)行的.
要求被覆盖的点的和的最大值.
Solution
首先想一个最暴力的(dp),设(f_{i,j})表示现在(dp)到了第(i)行,这一行选择的是(j)这个位置作为开始覆盖的位置.
与它不相交的直接前缀后缀和做,相交的考虑(2*k)的暴力枚举即可.
考虑直接用线段树维护这个相交,很容易可以得到一种(nmlog(m))的做法,边做边改即可.
进一步优化复杂度,考虑不相交的部分还是直接前缀后缀和计算,相交的部分拆成两个前缀和的形式,用单调队列维护即可.
Code
F1
F2(nmlog(m)
对不起,(nm)的做法鸽了.