码迷,mamicode.com
首页 > 其他好文 > 详细

低水平选手的自我救赎 (1)CLRS Exercise 16.5-2

时间:2018-03-21 18:37:36      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:解法   记录   www   总结   来源   tps   小学生   class   时间   

题目大意

给定正整数 $n$ 和一个由 $m$ 个正整数构成的可重集合 $A$,满足 $\forall a\in A,?a\le n$ 且 $m\le n$ 。
定义 $N_t(A) = |\{a\in A\colon a\le t\}|$ 。请在 $O(m)$ 的时间内判断 $\forall t = 0, 2, \dots, n,?N_t(A)\le t$ 是否成立。
多组询问。

解法

用一个长为 $n$ 的数组 $\mathrm{cnt}[1..n]$ 记录集合 $A$ 中每个数出现的次数,若存在 $a\in A,?\mathrm{cnt}[a]>a$ 则结论不成立,否则成立。


这解法是错的。来源
反例:$A=\{1,2,2\},?n=3$
(我要给 Solution Author 发邮件!)

正解在此

对于 $t \ge m$,$N_t(A)\le m \le t$ 自然成立。
只需考虑对 $t < m$ 是否有 $N_t(A)\le t$ 。

统计前缀和判断一下即可,复杂度 $O(m)$ 。

总结

  1. 这道题真的没那么简单
  2. 我的水平确实低(真心的)
  3. 我要仔细读读 CLRS
  4. 把自己当做小学生!

低水平选手的自我救赎 (1)CLRS Exercise 16.5-2

标签:解法   记录   www   总结   来源   tps   小学生   class   时间   

原文地址:https://www.cnblogs.com/Patt/p/8616207.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!