摘要: 解法很多。可用哈希、离散化、平衡树。 首先是哈希,记得要挂链。然而我并不会什么高深的哈希函数。 离散化,排序一下标号后用布尔数组判重。 说是说平衡树,其实就是个set,懒得手打咯。STL大法真不错。 阅读全文
posted @ 2017-09-25 19:20 失忆的旅行者 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 裸的二分图最大匹配,匈牙利算法水过。 阅读全文
posted @ 2017-09-25 19:12 失忆的旅行者 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 布尔型动态规划。 f[i][j]表示第i首歌之后,音量为j是否可行。 f[i][j]=f[i-1][j-c[i]] | f[i-1][j+c[i]]。 阅读全文
posted @ 2017-09-25 16:11 失忆的旅行者 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 倘若要从一个数找它的约数,那么是没有办法的。 但是我们可以倒着思考,从一个数找它的倍数。 可以发现n中有n/2个2的倍数,有n/3个3的倍数,于是直接累加起来便是答案。 只需要输出∑N/i(i<=N)。 阅读全文
posted @ 2017-09-25 15:51 失忆的旅行者 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 典型使用状态压缩的动态规划。 可以预处理可行的方案来加速。 设f[i][j][k]为第i行,状态为j,共用了k个国王的方案数。 i&(i<<1)=0表示这行方案可行。 i&j=0 && i&(j<<1)=0 && i&(j>>1)=0表示这两种状态不冲突。 阅读全文
posted @ 2017-09-25 15:44 失忆的旅行者 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 此题主要是一个补集思想。 可能发生越狱的状态=所有状态-不会发生越狱的状态=M^N-M*(M-1)^(N-1)。 (M^N-M*(M-1)^(N-1))%P=(M^N%P-M*(M-1)^(N-1)%P+P)%P。 用快速幂来求解。 阅读全文
posted @ 2017-09-25 15:20 失忆的旅行者 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 二进制拆分:只要有2^0,2^1,2^2……就可以组成小于等于这些数和的全部正整数。 比如有2^0,2^1,2^2就可以组成小于等于7的全部正整数。直接套用就可以了。 阅读全文
posted @ 2017-09-25 14:59 失忆的旅行者 阅读(88) 评论(0) 推荐(0) 编辑
摘要: 典型数据结构题,可用线段树、ST表、栈、树状数组。 线段树就不说了,裸的一比,也不难打,就是跑得有点慢。 ST表在网上貌似不多,这个数据结构是天生支持从末尾插入的。 代码很短,就是内存需要得比较大,跑得还是挺快的。 由于询问一定是询问的最后几个中的最大值,所以我们可以维护单调性,保证栈顶到栈底单调递 阅读全文
posted @ 2017-09-25 13:58 失忆的旅行者 阅读(131) 评论(0) 推荐(0) 编辑
摘要: 经典题型,贪心算法。我们用大根堆来维护前k个元素中选最多个数,所需时间的最小值。 先按照结束时间排序,然后从第一个开始枚举。 如果现在的所需时间的总和小于等于这个建筑的最晚开始加工时间,那么就维修,把所需时间放入大根堆中。 否则就判断这个建筑的所需时间是否小于大根堆的堆顶元素,如果是,就弹出堆顶元素 阅读全文
posted @ 2017-09-25 12:31 失忆的旅行者 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 看起来像裸的二分图最大匹配,但是网上看来有神奇的并查集做法。 二分图最大匹配的匈牙利算法,这个网上有很多资料,就不说了。 接下来是优美的并查集做法。大家可以去看看黄学长的博客。 如果出现一个装备两个属性值在同一集合,那么这个集合里所有的属性值都可以选择了,于是把这个集合的根标记为可以选择。 如果出现 阅读全文
posted @ 2017-09-25 11:29 失忆的旅行者 阅读(128) 评论(0) 推荐(0) 编辑