Codeforces Round #113 (Div. 2)

Codeforces Round #113 (Div. 2)

B. Polygons

题意

  • 给一个(N(N le 10^5))个点的凸包
  • (M(M le 2 cdot 10^4))次询问,每次给一个点判断该点是否在凸包内。

思路

  • (y)坐标将凸包分成两部分。
  • 在左右两边二分找出夹住该点的(y)值区间,判断叉积正负。

代码


D. Shoe Store

题意

  • (N le 10^5)双鞋,每双鞋价格为(c_i le 10^9),大小为(s_i le 10^9),保证任意两双鞋的大小均不相同。
  • (M le 10^5)个顾客,每个人有钱(d_i le 10^9),以及脚的大小(l_i)。当(c_j le d_i)(s_j = l_i or s_j-1=l_i)时,这位顾客就会买相应的鞋。每个人最多买一双鞋。
  • 求最大收益。

思路

  • 每个人只关心(l_i)(l_i+1)的大小的鞋,并且每种大小的鞋只有一双,所以按(l)从小到大排序,考虑每个人买鞋状态。
  • (f(i, st))表示到第(i)个人时,((l_i+1,l_i))是否被买的状态(st)的最大收益:
  • (st)需要根据(l_i)(l_{i-1})的大小转移。

代码


E. Tetrahedron

题意

  • 一只蚂蚁从(D)点出发,每次会边走到邻近的一个顶点上,求蚂蚁走(n le 10^7)后回到(D)的方案数,modulo 1000000007。

思路

  • 矩阵+快速幂

代码

原文地址:https://www.cnblogs.com/mcginn/p/5914692.html