用户工具

站点工具


2020-2021:teams:tle233:week_1_2020_7_25-2020_7_31

这是本文档旧的修订版!


2020/01/01 -- 2020/02/02 周报

团队训练

Marvolo

专题

比赛

题目

AtCoder:

Air Safety

具体见本周推荐.

Kevin

专题

比赛

题目

TownYan

专题

比赛

题目

本周推荐

Marvolo

AtCoder:

Air Safety

题意:给出一个二维平面上一些飞机的坐标和它们飞行的方向(上下左右之一),飞机会沿着飞行方向一直移动.问最近的一次碰撞将会发生在什么时候.

tag: set

题解:分类讨论,首先是上下碰与左右碰的情况,以及两架飞机在y=x+a或y=a-x上时,发生的四种直角碰撞.对于单一的碰撞方式,例如上下碰,可以先把所有向下走的飞机的纵坐标扔到set里,然后枚举所有向上走的飞机,求它的纵坐标在set里的前驱,算一个答案并维护最小值即可.不用set应该也可以,只不过判断时可能麻烦一点.

comment:set的良好练手题.之前看一篇辣鸡博客说set的lower_bound是求小于等于一个值的最后一个元素的,实际上人家是求大于等于一个值的第一个元素的,也就是lower_bound返回的迭代器再往前一个才是前驱,导致浪费了很多调试的时间.

牛客OJ:

Graph

tag:Trie树,DP,启发式合并

题意与题解参考这里

comment:赛后讲题的时候,大家都是用的Trie树与DP.但是是从上往下算的,其实这道题可以从下往上算,合并两个分支就代表着在两个连通块间连边,如何选择两个数使得他们的异或值最小可以通过暴力走Trie树解决,辅以启发式合并就可以顺利解决时间复杂度的问题.

Kevin

TownYan

https://ac.nowcoder.com/acm/contest/5670/D

题意

给定一个排列,有两种操作,每种操作可以连续使用若干次:(1)将第一位的数放到最后,其他数向前补。(2)将倒数第二个数放到第一位,除最后一位不动以外其他数向后补。问最多需要使用多少轮第二种操作才能把这个排列改成单调的(每一轮可以使用任意次)。

题解

可以理解成用最后一位进行插入排序,问题转化为求原序列拿出多少位以后变成循环条件下单调的(比如3412就是单调的)。题里也没有为难这一点,最长给500,可以直接暴力枚举“最长上升子序列”的最小数的位置,复杂度n^2logn。然后答案就是n-最长的LIS的长度。

2020-2021/teams/tle233/week_1_2020_7_25-2020_7_31.1596169240.txt.gz · 最后更改: 2020/07/31 12:20 由 townyan