Codeforces Round #113 (Div. 2)

时间:2022-08-06 02:17:45

Codeforces Round #113 (Div. 2)

B. Polygons

题意

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

思路

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

代码


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

题意

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

思路

  • 矩阵+快速幂

代码