随笔分类 - 算法竞赛进阶指南
摘要:题目链接 题意:给你一组等长木棒,然后他随意砍断成n个木棒,木棒长度不一,但你知道分别是多少,要你求出原始木棒可能的最小长度。 思路:首先那个原始木棒的长度肯定是其总长度的约数,然后也肯定大于等于所有木棒的最大值,然后去DFS,要注意的是,DFS的过程中我肯定先从大的取起,这样可以优化搜索顺序,然后
阅读全文
摘要:题目链接 题意:给定一张N个点M条边的有向无环图,分别统计从每个点出发能够到达的点的数量。N,M<=30000。 思路:先拓扑排序,这样肯定拓扑序前面的肯定在拓扑序后面的点的前面。然后用状态压缩,用bitset转化成二进制,一顿从后往前按位或,有多少1就代表有多少个能达到的点的数量。 #includ
阅读全文
摘要:荷马史诗 题意:给n个单词出现的次数,然后给个k,让这个单词转换为二进制,然后求总长度最小,以及最大的一个转换后字符串的长度。 题解:我们发现这道题目,要求我们算出哈夫曼编码,也就是最短不重叠前缀的编码,那么我们就可以用上trie字典树的性质配合哈夫曼树进行处理. #include<cstdio>
阅读全文
摘要:题目链接 题意:输入x,a,y,b求x/a和y/b的大小,范围long long int 思路:因为不想用精度,嫌麻烦,所以用了个巧方法。先求x/a和y/b整形的大小,如果相等,再求(x%a)*b和(y%b)*a的大小,具体为什么可以这样比较,初中生都会。 #include<cstdio> #inc
阅读全文
摘要:题目链接 题意:给你两个数组a,b,大小为n,让你寻找一个数p (1<= p <= n) ,使之在 1~p 任意一个区间中a,b数组的最小值下标相同。 思路:看到用线段树去写的我也是服了。。。我的思路是这样的,先去更新最小值,如果更新情况不一样肯定结束,然后看前面是否都一致单调递减。 #includ
阅读全文
摘要:合并果子 题意:将n堆果子合并为一堆,每次合并两堆,合并消耗的体力为两堆果子的质量和,求消耗的体力最小。 思路:典型的哈夫曼树,两两最小,再放入优先队列,再重复直到只剩下一堆。 #include<cstdio> #include<cstring> #include<algorithm> #inclu
阅读全文
摘要:数据备份 题意:给你一个n和k,再给你n个城市离原点的距离,让你找k对城市,使他们之间的距离和最小。 思路:因为取k对城市,k对城市肯定是互相相邻的且不能出现重复。把两两相邻的城市的距离求入a数组中,所以当你选了ai,你就不能选ai+1或ai-1,所以有两种情况,要么选ai,要么选ai+1和ai-1
阅读全文

浙公网安备 33010602011771号