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 \to x-1,x \to x, x \to 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\)的做法鸽了.

posted @ 2020-02-16 21:43  fexuile  阅读(234)  评论(0编辑  收藏  举报