Edu Round 板刷计划 1. Educational Codeforces Round 1 题解

发布时间 2023-03-22 21:13:04作者: Lyrically

Change Log:

  • 2023.03.21 开坑.

A - Tricky Sum

简单题. 注意到 \(n\) 以内 \(2\) 的幂次只有 \(O(\log n)\) 个,因此只要先算出 \(1\) ~ \(n\) 里所有数的和再减去 \(2\) 的幂次的和的 \(2\) 倍即可. 时间复杂度 \(O(t\log n)\). 当然还有 \(O(t)\) 做法,不过已经绰绰有余了,无需再优化.

Sample submission.

B - Queries on a String

简单题. 注意到一个区间循环移位区间长度次后就会恢复原状,因此先将 \(k\) 模上 \((r-l+1)\). 接下来只要模拟一下即可. 具体地,将一段区间的后 \(k\) 个字符放到最前面,前面的都放到最后面. 时间复杂度 \(O(m\left | s \right |)\). 注意细节.

Sample submission.

C - Nearest vectors

计算几何模板题. 我寻思这题是 *2300 的唯一原因恐怕就是卡精度 hack 了一车人吧/fad.

考虑将 \(x\) 轴正方向作为始边,则可以通过计算反正切值得到这个向量与 \(x\) 轴正方向的夹角度数. 接下来,将角度排序. 于是将角度看成环,则只有在这个环上相邻的两个向量有可能作为答案,循环 check 一下即可. 时间复杂度 \(O(n\log n)\). 但是 long double 很慢,而且还卡精度,注意一下.

Samle submission.

D - Igor In the Museum

这种题为什么能是 D? 不懂.

考虑先 \(O(nm)\) 预处理所有格子的答案,然后 \(O(1)\) 回答单次询问.

如何预处理?容易发现对于每个连通块,答案都是一样的. 故每次 dfs 的时候都对于每个点算出周围不是空地的格子的数量,累加即可. 最后将这个连通块里所有的格子的答案都变成当前的答案,复杂度就是 \(O(nm)\) 的. 实现起来也很简单.

Sample submission.