UOJ Logo chunzhen的博客

博客

2021年5月 月赛题解

2021-05-31 18:17:42 By chunzhen

T1

直接求出平均数和余数。 如果平均数大于余数,则将平均数减 $1$ 、余数加上 $n$ 。

T2

很简单的模拟题。

$flag[i]$ 标记第 $i$ 个字母是否在咖啡馆内,$cnt$ 记录一共有少个字母在咖啡馆内。

对于字母 $c$ 没有被标记,则有:

  • 如果 $cnt < N$ ,则进入咖啡馆,$cnt++$ ,$flag[c-'A']$ 标记为 $1$;
  • 否则,即代表这个字母是不能进入到咖啡馆的,记录下来,答案加一。

如果 字母 $c$ 已经在之前被标记过了,则直接 $cnt--$

T3

对于 $60$ 分,找出每个数后面比它小的数的个数即可,时间复杂度 $O(n^2)$ 。

对于 $100$ 分,因为数字只会是 $\{ 1, \ 2, \ 3 \}$ 其中的一个数。 那么我们可以从后往前分别求出每个位置的后面 $1$ 和 $2$ 的个数。 然后再对于每个位置,我们就可以可以 $O(1)$ 的计算出答案。 总体时间复杂度 $O(n^2)$ 。

T4

对于 $60$ 分,直接两层循环模拟一下洗牌的过程。

对于 $100$ 分,直接用队列模拟一下,每一次操作都是 将队首元素出队、新的队首元素出队后重新进队 。时间复杂度 $O(n)$ 。

T5

对于 $30$ 分,每个同学都可以枚举学校录取线,找到距离自己估分最近的即可。 时间复杂度 $O(n*m)$ 。

对于 $60$ 分,维护一个桶,范围为 $10^5$ 。将学校的录取分数线排序,然后在桶里面记录每个数字对应的与其最近的学校录取分数线。 这样学生就可以通过桶 $O(1)$ 的查询到与之分数最近的学校录取分数线。 时间复杂度 $O(n+m)$ 。

对于 $100$ 分,二分。 将学校录取分数线排序后; 对于每个学生,都可以二分出来不大于学生估分线的最大录取分数线,后面一个数即是大于学生估分线的最小的录取分数线。 比较一下两者谁跟接近学生的估分线即可。 不过还需要注意学生的估分比所有学校录取分数线都低或者都高的边界情况。 时间复杂度为 $O(n * logm)$

评论

changziliang_2026
军哥nb!!
Zhangbotao_2026
军哥nb!!
Flux_dubes
发现t4不能用STL的queue,会MLE
changziyu_2026
qp%%%
fengweichen27
七扭八歪
fengweichen27
@zhangchenshuo_2027好久不见

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。