省选模拟22 题解

A. 遮天蔽日

学习了计算几何相关的很多新技巧。

求过一点$P$,圆$O$的切线:通过两点距离、半径,用反三角函数可以解得一个角度,然后就可以算了。

求直线$PQ$,与圆$O$的交点:作点$O$关于$PQ$的垂线,通过半径和垂线长度,可以算得垂足与交点的距离,然后就可以算了。

求多边形的重心:任选一点$O$,选择顺时针(逆时针)上相邻的每个点对$(P,Q)$,对横纵坐标分别加权平均,加的权为面积。

公转:使重心旋转,保持每个点与重心的相对位置不变,整个多边形的朝向不变。

因为打的不是正解,所以伪了(在凸多边形下是正确的)。

正解的意思大概是,让太阳与每个端点作一条直线,分别交在地球上。

那么相邻的两个交点之间是否被覆盖的关系是相同的。

所以任选相邻的两个交点形成的弧上任意一点,判断该点到圆的线段上是否与其他任意一条线段相交即可。

B. 三元组

这个题和一道叫做最长双回文串的题很像。

容易发现那个对乘积的求和,可以拆成求和式*求和式。

处理出每个点为右端点的左侧贡献,每个点为左端点的右侧贡献,然后枚举作乘积就好了。

一个办法是打$manacher$,然后写恶心的等差数列差分。

另一个办法是直接使用回文自动机,简单粗暴维护$fail$树上每个点对应的回文串个数、回文串总长度即可。

C. 最有价值

可以发现,这个东西有点像最大权闭合子图。

然后是一些显然的建图。

与一道叫做寿司餐厅的题很像。

对于选每个点的代价,每种字符的第一个位置的代价为$b_i$,第一个位置之后的代价均为$a_i$。

用寿司餐厅中的套路,首先令每个位置的代价都为$a_i$,如果选了至少一个位置,那么强制付出再$b_i-a_i$即可。

魔改一下建图,用那些很套路的方法,可以将点数缩减到$O(n)$级别。

猜你喜欢

转载自www.cnblogs.com/skyh/p/12288887.html