CYEZ 模拟赛 3

题面

A String Master

萌萌题,但是看错题。

代码

B 平均数

典典题。

二分平均值 x x x。统计均值小于 x x x 的方案数,每个数减去 x x x 后即统计多少个区间和 < 0 <0 <0。容易发现是个二维偏序问题,归并排序统计即可。

代码

C Tourist Attractions

典典题。

n ≤ 1500 n \le 1500 n1500 O ( n 3 ) O(n^3) O(n3) 可以用 bitset 优化。

S S S u , v u,v u,v 均能到达的点集,答案为:
∑ ( u , v ) ∈ E ( deg ⁡ ( u ) − 1 ) × ( deg ⁡ ( v ) − 1 ) − ∣ S ∣ \sum_{(u,v)\in E} (\deg (u) - 1) \times (\deg(v) - 1)-|S| (u,v)E(deg(u)1)×(deg(v)1)S

代码

D Walk

哈哈题。

大体思路就是每个点被 bfs 更新的第一次就是最短路。

O ( n 2 + n + m ) O(n^2+n+m) O(n2+n+m):暴力建边 bfs 即可。

考虑建权值虚点,原图点向对应权值虚点建权值为 1 1 1 边。

O ( 3 20 + n + m ) O(3^{20} + n + m) O(320+n+m):对于每个 v a l i val_i vali 向其子集虚点建权值为 0 0 0 的边。

O ( 20 × 2 20 + n + m ) O(20\times 2^{20}+n+m) O(20×220+n+m):为避免重复的访问,对于每个 v a l i val_i vali v a l i val_i vali 去掉一位的权值虚点建权值为 0 0 0 的边。

总结

预估 100 + 100 + 100 + 40 = 340 100+100+100+40=340 100+100+100+40=340,实际 10 + 40 + 100 + 20 = 260 10+40+100+20=260 10+40+100+20=260。A 题目看错,提交期间重新交了一发。B 用 BIT 多次离散化会比归并多点常数,被卡到了 40 40 40。C 没啥好说的。D 建虚点的套路比较难想。挂了 170 170 170 分?

你可能感兴趣的:(比赛,c++)