Google CodeJam 2015 Round1A 总结

昨天和Ruclion参加了Google CodeJam 2015 Round1A,第一题题目描述的不太清楚导致耗时太久,最终第三题只能写了个O( n^3 )的暴力过了小数据,大数据虽然想出了写法,但是已经没时间调了。不过最终还是以600多名的成绩进Round2了。感觉还不错吧。

A.Mushroom Monster

A题题目描述的不太清楚,导致浪费了好多时间。

题目大意:给出了一个序列表示每隔10s盘子中蘑菇的数目,可以在任意时刻往盘子中添加任意数目的蘑菇,kaylin吃蘑菇有两种吃法:

  1. kaylin可以在任意时间吃任意数目的蘑菇
  2. 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)$。