摘要: 传送门 解题思路 哈夫曼树(Huffman Tree),就是一棵树满足叶子节点的权值*到根节点的距离的和最小的树。 一开始假设整个图没有任何连边。 然后贪心思想,每次新建一个节点,取k个权值最小的节点作为这个节点的儿子(相当于把节点合并)。 这样每次少k-1个节点,会导致最后一次合并不满k个节点。 阅读全文
posted @ 2021-10-08 20:07 尹昱钦 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 一直往扫描线方面想,结果自己没想出来,还是运用的不够灵活。 其实很简单,对于查询区间[l,r],答案为左端点小于等于r的区间数-右端点小于l的区间数。 维护两个树状数组即可。 AC代码 #include<cstdio> #include<iostream> #include<cst 阅读全文
posted @ 2021-10-08 19:09 尹昱钦 阅读(35) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 注意所有的砝码都是倍数关系,所以砝码质量的种类数只有log级别。 先用类似进制的方式求出质量尽可能多的装砝码方案。 然后再在其基础上进行贪心调整——砝码质量小的尽可能多用。 所以从小到大进行贪心选择即可(仿照减法借位) AC代码 #include<iostream> #includ 阅读全文
posted @ 2021-10-08 11:34 尹昱钦 阅读(35) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 暴力枚举指数的复杂度是 \(O(p)\) 的(费马小定理) 所以用分块思想。 将 \(l\) 分成 \(\sqrt p\) 块,每块的长度为 \(\sqrt p\)。 先预处理出 \(i=1\to \sqrt p\) 时 \(b^i\bmod p\) 的值,开个map存下值所对应的 阅读全文
posted @ 2021-10-08 09:02 尹昱钦 阅读(81) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 可以自己取一个大质数当做模数,或者直接利用unsigned long long的溢出。 进制也可以选择一个较小的质数,如13131或者15151等。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #includ 阅读全文
posted @ 2021-10-08 07:53 尹昱钦 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 首先很显然可以贪心进行选择,枚举哪个数字有k个,然后优先绝对值更靠近他的数字,即可算出最小代价。 下一个要求是字典序最小。 还是先删掉绝对值靠近他的点,先从前往后正序删比他的的数字,再从后往前逆序删比他小的数字,即可保证字典序最小。 AC代码 #include<iostream> 阅读全文
posted @ 2021-10-08 07:44 尹昱钦 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 概括一下题意:求字符串中abababa子序列的个数。 考虑dp。 设dp[i]表示以子序列第i位结尾的方案数。 显然第i位是'a'时dp[i]才不为0。 转移方程为: \(dp[i]=1+\sum_{j=1}^k dp[j]\) 其中k为上一个b出现的位置。 显然可以边求dp边记录 阅读全文
posted @ 2021-10-08 07:33 尹昱钦 阅读(53) 评论(2) 推荐(0) 编辑
摘要: 传送门 解题思路 按照字符在a中出现的位置映射到b字符串中。 求逆序对数即为答案。 AC代码 #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<iomanip> #include<vector 阅读全文
posted @ 2021-10-08 00:15 尹昱钦 阅读(43) 评论(0) 推荐(0) 编辑