Codeforces Round #620 (Div. 2) 题解

Codeforces Round #620 (Div. 2)题解

前言

(WhiteCmile)带飞了.(

A. Two Rabbits

题意

你现在有两只兔子,一个在(x),一个在(y),一个一次能跳(a),另一个一次能跳(b),只能往另一只兔子的原位置的方向跳.问这两只兔子能否相遇.

Solution

直接判断(|x-y|)能否被(a+b)整除即可.

Code

A

B. Longest Palindrome

题意

你现在有(n)个长度为(m)的串,你可以选择删除其中的一些串,然后将剩下的串任意组合在一起,使得它是回文串.求最长的回文串的长度.

Solution

直接(n^2)的求出每一个串的回文串,然后匹配即可.
注意到每一个串有且仅有一种本质的回文串,所以随便匹配即可,注意特判一个串回文的情况.

Code

B

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

C

D. Shortest and Longest LIS

题意

要求你构造出两个排列,满足给定的不等式关系,第一个要求(LIS)最短,第二个要求(LIS)最长.

Solution

考虑(<)可以连出一个(top)关系图,考虑最长显然就是从前往后把所以的点拓扑排序,最短的就是从后往前(topsort).
然后这样子输出即可.

Code

D

E. 1-Trees and Queries

题意

给你一棵树,每一次询问((a,b,x,y,k))表示新加一条双向边((x,y)),问从(a)走到(b)是否存在一种恰好走(k)条路的方法.可以重复经过一条边和一个点.

Solution

比较简单的题目,我觉得作为一场(Div1)(B)题来说过水.
直接判断长度和奇偶性即可.
分三种情况:

  1. 直接走.
  2. 用这条((x,y))边.
  3. ((x,y))这个环.

然后直接随便求一下距离即可.

Code

E

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)的做法鸽了.

原文地址:https://www.cnblogs.com/fexuile/p/12318919.html