算法
文章平均质量分 86
_zhj
加油!
展开
-
HDU4135容斥原理
题意:给三个数a、b和n,求区间[a,b]中与n互质的数的个数。1 15,1 9。解析:本题直接求与n互质的数的话,由于区间范围太大,肯定超时。因此可以用全部的数,减去与n不互质即有公因子的数的个数。1、先求出n的所有质因子2、由于区间【1,m】中,含有质因子x的数的个数为m/x,因此把含有x的数都减去,即减去m/x个。遍历所有的质因子,依次减去。但是这样减的话,会多减去一些数,正原创 2017-05-11 17:00:20 · 322 阅读 · 0 评论 -
HDU5944
HDU5944原创 2017-05-12 16:15:50 · 1141 阅读 · 0 评论 -
HDU5945 Fxx and game
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5945题意:给3个数x, k, t。经一系列操作后,使x变为1,求最少的操作次数。具体操作为:每次x可以减去一个数0~t,或者除以k。解析:本题使用dp,但是需要用单调队列进行优化。动规需要从1开始,一直往上计算,直到x为止。递归公式为:dp[i]=min(min(dp[i-t]~dp[原创 2017-05-12 19:23:11 · 276 阅读 · 0 评论 -
HDU5908Abelian Period
Abelian PeriodTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/131072 K (Java/Others)Problem DescriptionLet S be a number string, and occ(S,x) means the times that numb原创 2017-05-16 19:58:26 · 190 阅读 · 0 评论 -
KMP简单模板
KMP代码:#include #include #define N 100 int KMP(char s[], char t[], int lens, int lent);void GetNext(char t[], int lent);int next[N];int main(){ char s[N], t[N]; printf("请输入母串: "); scanf("%s"原创 2017-05-08 21:25:16 · 233 阅读 · 0 评论 -
HDU5512Pagodas
PagodasTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1493 Accepted Submission(s): 1033Problem Descriptionn pagodas were s原创 2017-05-08 20:41:32 · 318 阅读 · 0 评论 -
HDU5510 Bazinga
Bazinga;字符串原创 2017-05-08 16:09:33 · 345 阅读 · 0 评论 -
HDU5521最短路径
MeetingTime Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Problem DescriptionBessie and her friend Elsie decide to have a meeting. However, after Farme原创 2017-05-09 12:21:41 · 300 阅读 · 0 评论 -
并查集
在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。#define N 1050int Father[N];int Getfather(int num){// return Father[num] == num ? num : Getfather(Father[原创 2017-05-18 10:22:08 · 213 阅读 · 0 评论 -
数学函数
三角函数:(所有参数必须为弧度) 1.acos 函数申明:acos (double x); 用途:用来返回给定的 X 的反余弦函数。 2.asin 函数申明:asin (double x); 用途:用来返回给定的 X 的反正弦函数。 3.atan 函数申明:atan (double x); 用途:用来返回给定的 X 的反正切函数。转载 2017-05-18 10:31:02 · 259 阅读 · 0 评论 -
查找n个元素中的第二小元素
一道算法导论上的课后习题,最坏情况下最小比较次数是 n + - 2。如下图所示先两两比较找出最小值,即非叶节点的个数,需要n-1次。然后找第二小元素,第二小元素一定是和最小元素比较过的。这样的结点一共有个,因此需要-1次比较。所以总的比较次数是n + - 2。原创 2017-05-18 15:25:51 · 1062 阅读 · 0 评论 -
HDU4909 String
StringTime Limit: 4000/2000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)Problem DescriptionYou hava a non-empty string which consists of lowercase English letters and原创 2017-05-29 15:11:18 · 245 阅读 · 0 评论 -
HDU4858 项目管理
项目管理Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Problem Description我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的!两个节点间可能有多条边,不过一条边的两端必然是不同的节点。每个节点都有原创 2017-05-18 19:51:53 · 247 阅读 · 0 评论 -
HDU4932 Miaomiao's Geometry
Miaomiao's GeometryTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Problem DescriptionThere are N point on X-axis . Miaomiao would like to cover them A原创 2017-05-31 10:59:00 · 289 阅读 · 0 评论 -
HDU4883TIANKENG’s restaurant
TIANKENG’s restaurantTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Problem DescriptionTIANKENG manages a restaurant after graduating from ZCMU, and原创 2017-05-19 21:26:00 · 203 阅读 · 0 评论 -
HDU4884 TIANKENG’s rice shop
TIANKENG’s rice shopTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Problem DescriptionTIANKENG managers a pan fried rice shop. There are n kinds of fr原创 2017-05-20 17:13:53 · 299 阅读 · 0 评论 -
求欧拉函数
欧拉函数的定义: 在数论中,对于正整数N,少于或等于N ([1,N]),且与N互质的正整数(包括1)的个数,记作φ(n)。φ函数的值: φ(x)=x(1-1/p(1))(1-1/p(2))(1-1/p(3))(1-1/p(4))…..(1-1/p(n)) 其中p(1),p(2)…p(n)为x的所有质因数;x是正整数; φ(1)=1(唯一和1互质的转载 2017-06-01 11:20:52 · 467 阅读 · 0 评论 -
HDU4982 Goffi and Squary Partition
Goffi and Squary PartitionTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Problem DescriptionRecently, Goffi is interested in squary partition of integ原创 2017-06-05 21:24:40 · 261 阅读 · 0 评论 -
有向无环图的最短路径
问题:给定一个有向无环图和一个起点,求这个点到其他点的最短路径。(参考算法导论)因为求最短路径,所以之前的那些方法都可以用,但是这是个有向无环图,可以使用更好的方法在O(V+E)的时间内求出解。在这个图中,可以存在权值为负的边,因为无环也就没有负环,所以存在负边也可以求解。方法:1、先对有向无环图进行拓扑排序,确定结点之间的一个线性次序。2、按照拓扑排序的次序对点进行一遍处理即可。原创 2017-06-17 10:17:48 · 1397 阅读 · 0 评论 -
HDU4908 BestCoder Sequence
BestCoder SequenceTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1955 Accepted Submission(s): 653Problem DescriptionMr Potat原创 2017-05-22 11:05:10 · 277 阅读 · 0 评论 -
stl set常用操作
STL中的容器:vector封装数组,list封装了链表,map和set封装了二叉树等。set是关联式容器(关联容器是通过键存取和读取元素、顺序容器通过元素在容器中的位置顺序存储和访问元素),set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。set,multiset内部构造都是红黑树。原创 2017-06-06 16:21:34 · 581 阅读 · 0 评论 -
HDU1596 find the safest road
find the safest roadTime Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12829 Accepted Submission(s): 4566Problem DescriptionXX星原创 2017-06-18 09:02:56 · 189 阅读 · 0 评论 -
STL map常用操作
map是STL的一个容器,和set一样,map也是一种关联式容器。它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,有助于我们处理一对一数据。map内部构造是一棵红黑树。map基本操作:插入操作:第一种:数据的插入大概有三种方式,第一种:insert(pair(key1,value1))。第二种:in原创 2017-06-04 11:25:53 · 332 阅读 · 0 评论 -
HDU6029 Graph Theory
Graph TheoryTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 477 Accepted Submission(s): 229Problem DescriptionLittle Q love原创 2017-06-29 17:10:53 · 450 阅读 · 0 评论 -
next_permutation函数
这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件下面是以前的笔记 与之完全相反的函数还有prev_permutation (1) int 类型的next_permutation int main(){ int a[3]; a[0]=1;a[1]=2;a[2]=3; do { cout<<a[0]<<" "转载 2017-06-08 20:46:42 · 216 阅读 · 0 评论 -
vector常用操作
Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。为了可以使用vector,必须在你的头文件中包含下面的代码:#include 构造函数。 Vect转载 2017-06-09 11:28:59 · 558 阅读 · 0 评论 -
johnson最短路径
Johnson算法是求稀疏图的多元最短路径的算法,权值可以为负,但是不可以有负环。Johson算法是Bellman-Ford算法, Reweighting(重赋权重)和Dijkstra算法的大综合。主要的思想是使用dijstra算法对每个结点求单源最短路,但是dijstra不能解决有负权值的边,所有需要给边重新赋值,且赋值后最短路径与原来的最短路径的距离和path相同。使用斐波那契堆作为优先级队列转载 2017-06-30 17:14:04 · 1211 阅读 · 0 评论 -
最小生成树——kruskal
Kruskal算法是基于贪心的算法,以边为基础进行扩展。首先我们把所有的边按照权值先从小到大排列,接着按照顺序选取每条边,如果这条边的两个端点不属于同一集合,那么就将它们合并,直到所有的点都属于同一个集合为止。合并的过程需要用到并查集(具体见并查集)。Kruskal的时间复杂度分析:Kruskal算法每次要从都要从剩余的边中选取一个最小的边。通常我们要先对边按权值从小到大排序,这一步的时间原创 2017-07-01 10:13:50 · 249 阅读 · 0 评论 -
素数筛选法(普通筛和线性筛)
题目:给定一个n,求1~n的所有素数。下面介绍两种素数筛选法:第一种:普通筛法。时间复杂度是O(nloglogn),不足之处在于一个合数可能被筛选多次。代码:void Prime (){ memset(tag,0,sizeof(tag)); tag[0]=tag[1]=1; for(int i=2; i*i <= n; i++) if(tag[i]==0){原创 2017-06-02 10:51:06 · 4910 阅读 · 0 评论 -
HDU2682 Tree
TreeTime Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2676 Accepted Submission(s): 830Problem DescriptionThere are N (2<=N<=600原创 2017-07-01 18:03:47 · 234 阅读 · 0 评论 -
次优最小生成树
次优最小生成树是由最小生成树而来的,含义就是所有的生成树集合中,除去最小的那棵,剩下的集合中最小的生成树。(如果所有边的权值都不同,那么次优生成树是一定大于最小生成树的,但是如果存在边的权值相同,则次优生成树可能会等于最小生成树)基本思路是:先求出最小生成树T,然后将不属于最小生成树中的边加入T中,此时会形成一个环,然后将环中最大的一条边(刚加入的边不算)去掉,这样可以保证增加量是最小的。依次原创 2017-07-02 12:19:15 · 1282 阅读 · 0 评论 -
HDU4983 Goffi and GCD
Goffi and GCDTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1259 Accepted Submission(s): 436Problem DescriptionGoffi is doin原创 2017-06-11 18:22:11 · 264 阅读 · 0 评论 -
HDU4985
题意:给定一个置换群,找出其中能构成循环的子群,分别输出。解析:直接模拟即可。(此题感觉不太严谨,因为题目说是要字典序输出,但按照AC的程序来看每个循环的内部并没有保证是字典序,只是保证了循环之间的字典序。。。只是本人的一点理解)代码:#include #include #define N 100005int a[N];bool vis[N];int main(){ int原创 2017-07-04 10:39:06 · 229 阅读 · 0 评论 -
最短路径——Floyd
Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)。适用于多元最短路, 效率较低, 建图只能用邻接矩阵,可以有负边,但不能有负环。Floyd算法是基于动态规划的,依次扫描每个点,并以此点为中介,计算出经过该点的路径(i, j)的最短路径。弗洛伊德(Floyd)算法过程:1、用D[v][w]记录每一对顶点的最短距离。2、依次扫描每一个点,并以其为原创 2017-06-12 16:10:02 · 348 阅读 · 0 评论 -
最短路径——Bellman-Ford
Bellman-Ford算法可以解决权值有负值的图的单源最短路径,但不能存在从源点可达的权为负的回路,能够检测负圈。可以是有向图,也可以是无向图,但无向图中不能有负边(因为无向图有负边的话,这两个点之间就有负环路了)。Bellman-Ford算法的时间复杂度是O(V*E)。(V是定点数,E是边数)Bellman-Ford算法的流程如下:给定图G(V, E)(其中V、原创 2017-06-13 17:07:15 · 249 阅读 · 0 评论 -
最短路径——SPFA
SPFA可以解决权值有负值的图的单源最短路径,但不能存在从源点可达的权为负的回路,能够检测负圈。判断负环:如果某个顶点入队次数超过V次,则说明有负环。算法期望的时间复杂度为O(k*V),k为所有定点进队的平均次数(在稀疏图中k一般小于2,SPFA算法稳定性较差,在稠密图中SPFA算法时间复杂度会退化)。SPFA算法是对Bellman-Ford算法的一个优化,使用队列减少不必要的计算。实原创 2017-06-14 08:48:35 · 328 阅读 · 0 评论 -
HDU4986 Little Pony and Alohomora Part I
本题需要用到欧拉常数和递推。题意:有n个箱子,n把钥匙随机的放在里面,问打开所有箱子的期望。解析:每种情况都相当于一个循环的置换个数。循环置换个数求解:那么考虑f[i]为i个箱子的情况,f[i + 1]要么就是放在最后多一个循环,要么就是插入中间循环个数不变,对应的转移为f[i + 1] = (f[i] + 1) / i + f[i] * (i - 1) / i 化简得到f[i]原创 2017-07-05 19:47:01 · 286 阅读 · 0 评论 -
最短路径——Dijkstra
迪杰斯特拉法最短路径:其适用于权值为非负的图的单源最短路径, 建图可用邻接表,也可用邻接矩阵 。非负的原因:归入S集合的节点的最短路径及其长度不再变更,如果边上的权值允许为负值,那么有可能出现当与S内某点(记为a)以负边相连的点(记为b)确定其最短路径时,它的最短路径长度加上这条负边的权值,结果小于a原先确定的最短路径长度,而此时a在Dijkstra算法下是无法更新的,由此便可能得不到正确...原创 2017-05-09 14:04:28 · 488 阅读 · 0 评论 -
HDU3790 最短路径问题
最短路径问题Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 26688 Accepted Submission(s): 7921Problem Description给你n个点,m条无向边,每条边都有长原创 2017-06-15 09:32:22 · 235 阅读 · 0 评论 -
二分图匹配
这篇文章讲无权二分图(unweighted bipartite graph)的最大匹配(maximum matching)和完美匹配(perfect matching),以及用于求解匹配的匈牙利算法(Hungarian Algorithm);不讲带权二分图的最佳匹配。二分图:简单来说,如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。准确地说:把一个图的顶点划分为转载 2017-07-16 09:15:01 · 228 阅读 · 0 评论