index > 牛客多校第三场
概览
题目 | 做法 | 状态 |
---|---|---|
Graph Games | ||
Crazy Binary String | 签到 | √+ |
Guessing ETT | ||
Big Integer | ||
Trees in the Pocket II | ||
Planting Trees | 矩阵模型+单调队列 | ○ |
Removing Stones | ||
Magic Line | 平面几何 | √-○ |
Median | ||
LRU management |
○
代表赛后补题√+
代表赛内我通过的√-
代表赛内不是我做的√-○
代表赛内不是我做的,补了
Logs
其实我感觉这场能三题的,但是H题花了太多时间去二分了,没有想到最简单的办法,然后感谢tc2000731耐心地教我单调队列。
B - Crazy Binary String
输出一个01串最长的01数相等的,子串长度,和子序列长度。
水题wa了一发有点可惜。输出一个尽量长的01子串这个让我们考虑了一下,其实也是要点想法的。可以令 0 = − 1 0=-1 0=−1对串做一个前缀和,两个位置的前缀和相等,说明某个区间的01相等,记录第一个左边界,向右更新最大长度就可以了。另外就是前缀和是0说明整个前缀01相等。
H - Magic Line
题意是求一个直线划分平面上n个点,使得直线两边点数相等,且不能穿过点。输出两个直线上的整数点,并且范围在1e9之内。
只要按照x第一关键字,y第二关键字排序,第 n / 2 n/2 n/2的点就是划分的关键。只要取一个接近垂直,但是把前 n / 2 n/2 n/2点包含进去的就可以了。
亏我们三个人轮流二分了那么久ORZ
我的答案就是下面这样的, t m p = 1 e 8 tmp=1e8 tmp=1e8.
cout << p[half].x - 1 << " "
<< p[half].y + Tmp << " "
<< p[half].x + 1 << " "
<< p[half].y - Tmp + 1 << "\n";
F - Planting Trees
首先是一个子矩阵问题,然后是需要一点想法来处理一维数组的区间最大差值。用的是单调队列。