昨天和Ruclion
参加了Google CodeJam 2015 Round1A,第一题题目描述的不太清楚导致耗时太久,最终第三题只能写了个O( n^3 )的暴力过了小数据,大数据虽然想出了写法,但是已经没时间调了。不过最终还是以600多名的成绩进Round2了。感觉还不错吧。
A.Mushroom Monster
A题题目描述的不太清楚,导致浪费了好多时间。
题目大意:给出了一个序列表示每隔10s盘子中蘑菇的数目,可以在任意时刻往盘子中添加任意数目的蘑菇,kaylin吃蘑菇有两种吃法:
- kaylin可以在任意时间吃任意数目的蘑菇
- kaylin以恒定的速率吃蘑菇
问在这两种情况下,对于给定的序列,kayliin最少吃了多少蘑菇
非常简单的题目,直接模拟就好了。
B.Haircut
二分判定
题目大意:有$b$个理发师,每个理发师给一个人理发需要 $m[i]$ 的时间,现在有许多人排队理发,问给第$n$个人理发的是哪个理发师。
二分第$n$个人理发的时间,如果在这个时间前理发的人大于等于$n-1$,则判定成功
在二分完后,还需要扫一遍找到给第$n$个人理发的理发师。
C.Logging
计算几何
题目大意:平面上给了$n$个点,对每个点求如果以它为边界构建凸包至少要删掉几个点。
首先想出了一个 $O(n^3)$ 的算法。对第$i$个点,枚举另外一个点,这两个点组成了一个直线,枚举其他所有点,判读这个点在直线的哪一侧,有一侧的点要全部删掉,则这两侧的点数取较小的即可。
枚举第$i$个点后,通过对其他点进行极角排序可以把时间复杂度降到 $O(n^2\log n)$。