2019.11.08【NOIP提高组】模拟 A 组

今天的比赛终于没有那么难看了,但还是有一些值得改进的地方。

T1:这时一道水题,但是我想复杂了。

首先我们把所有点按y从大到小排序,然后对于每一个点我们只需要考虑哪些y值比它的的就行了。

我们枚举每一个点,然后把它当做原点,接着把y值比它大的点按极角排序,最后用叉积来算三角形的面积即可。

这里可以用前缀和优化成O(n^2)的。

总结:

1、这一类计算几何一般要想到极角排序和叉积。

2、在极角排序时,一二象限的极角值时正数,三四象限的极角值时负数。这是因为一条射线的极角值取决于(1,0)这条射线转到它的度数及方向。在极角排序时要注意这个的影响。

T2:首先发现这个图是一个简单环套树。

对于最大值,我们发现一个入度为0的点一定是要保留的。同时,对于一个所有点的入度都为1的简单环,也至少有一个点要保留。这样我们就求出了最大值。

对于最小值,我们用拓扑排序。对于一个入度为0的点,它是必保留的,所以它指向的点是必须要干掉的。这样一来,我们只需在拓扑的时候确定哪些点一定会被干掉,把剩下保留的点加入队列继续拓扑即可。

T3:这道题的题目大意可以转换为求一个前缀AB和后缀BA,使得它们的长度最大。

设f[i]表示A为1~i时B的最大长度,通过画图我们发现:f[i+1]>=f[i]-2

变形后得:f[i]<=f[i+1]+2

接着我们倒着求f,每次从f[i+1]+2开始枚举,枚举倒第一个成立的答案就是f[i]。

用哈希判断两个字符串是否相等就可以了。

发布了149 篇原创文章 · 获赞 24 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/chiyankuan/article/details/102979891