
ACM
蟠修
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ACM程序设计基础课开课
2019年2月25日 晚上七点,再一次来到有关“程序设计”的课堂,这次,老师针对ACM/ICPC进行了全面且具体的介绍,让我们深刻了解开设这门课程的目的,而自己亦有修学这门课程的理由。目前,全国范围内含金量最高的计算机赛事便是ICPC和CCPC。 现在的自己比不了从小就开始接触编程的别人,但只要肯付出,亦有可能收获一定的成绩。那么,便从现在做起,从开始的STL学起。...原创 2019-02-26 22:31:32 · 251 阅读 · 0 评论 -
5月1日
二分法的拓展——三分法 不同于二分法中数据的单调性,三分法可用于求解某凸性或凹性函数的极值,由于通过函数本身表达式并不容易求解,故可以用三分法不断逼近求解。 三分法类似二分的定义Left和Right mid = (Left + Right) / 2 midmid = (mid + Right) / 2; 如果mid靠近极值点,则Right = midmid; 否则(即midmid靠近极...原创 2019-05-02 19:54:42 · 141 阅读 · 0 评论 -
5月4日
单调队列 单调队列中元素具有单调性,队首和队尾都可进行出队操作,而只有对位可以进行入队操作。 若在单调队列中插入元素,若插入的元素破坏单调性,则删除队尾元素直到插入的元素不再破坏单调性为止。往往用于取最优值——访问首尾元素。 小知识:使用freopen("1.txt","r",stdin); 该语句可直接导入样例数据,无需重复多次输入样例,大大的节省了时间,同时也提高了输入的准确率。 ...原创 2019-05-04 23:39:34 · 130 阅读 · 0 评论 -
4月24日
这段时间对搜索有了一定的了解,对深搜和广搜也有了一定的认识,知道了两者之间的区别以及何时使用哪种搜索方式。 深搜可以说是“一条路走到黑”,它能列举出所有的可能,将所有情况全部枚举出来。而广搜则是耗时最短——最快速的搜索。根据不同的题目,采用不同的方法。今天在上数分课的时候讲到梯度,引出“盲人下山”(找到最快捷的下山方式),若将其编程,则就是广搜问题。 同时,上节课还开了新的专题——二分,这里的...原创 2019-04-24 23:25:28 · 140 阅读 · 0 评论 -
5月8日
数据结构 1、栈 栈顶近栈顶出。插入一般称为进栈(PUSH),删除则称为退栈(POP)。用一个栈指针TOP指向栈顶。若TOP=0,表示栈空,TOP=N时栈满。进栈时TOP加1。退栈时TOP减1。当TOP<0时为下溢。栈指针在运算中永远指向栈顶。 2、队列 队列是队尾进,对头出(先入队的元素先出)。 3、树及二叉树 二叉树的关键词:度、结点(结点有叶结点、分支节点,同时称上端结点为...原创 2019-05-08 23:53:21 · 123 阅读 · 0 评论 -
5月18日
图论 图的存储结构: 1、二维数组邻接矩阵存储 2、数组模拟邻接表存储 图的邻接表存储法,又称链式存储法。本来是要采用链表实现的,但大多数情况只要用数组模拟即可。 void add_edge(int from,int to,int dis) //加入一条从from到to距离为dis的单向边 { edge[++num_edge].next=head[from]; edg...原创 2019-05-19 10:34:29 · 163 阅读 · 0 评论 -
5月15日
数据结构——堆 堆结构是一种数组对象,它可以被视为一棵完全二叉树。树中每个结点与数组中存放该结点中值的那个元素相对应。 堆分为大根堆和小根堆(大根堆即为父结点大于子结点,小根堆则相反)。 对堆的操作主要有两个:put和get。put指加入元素,get则从堆中取出并删除一个元素。 堆的应用: 经典的Huffman树问题。Huffman树的构造方法如下: 从森林里取两个权和最小的结点; ...原创 2019-05-15 23:57:14 · 170 阅读 · 0 评论 -
5月11日
二叉树 性质: 在二叉树的第i层上最多有2^(i-1)个结点(i>=1)。 深度为k的二叉树至多有2^k –1个结点(k>=1)。 【特别】一棵深度为k且有2k–1个结点的二叉树称为满二叉树。如下图A为深度为4的满二叉树,这种树的特点是每层上的结点数都是最大结点数。 对任意一棵二叉树,如果其叶结点数为n0,度为2的结点数为n2,则一定满足:n0=n2+1。 具有n个结点的完...原创 2019-05-12 01:04:57 · 136 阅读 · 0 评论 -
5月25日
并查集的作用: 查询两点是否联通,即两点的关系。 于是在用克鲁斯卡尔建造最小生成树时,可以用并查集判断是否需要加入此边,也可以查询u到v的路径中的最小边权。 并查集可以通过压缩路径进而大大减少复杂度,从而A一题。并查集的实现操作步骤:建立一个新的集合,将包含x和y的动态集合合并为一个新的集合,返回一个指向包含x的集合的代表。 判断元素是否属于同一集合: bool judge(int ...原创 2019-05-26 02:21:01 · 170 阅读 · 0 评论 -
4月27日
搜索专题结束了…… 二分查找是二分算法中最简单基础的一类题目,在一个单调有序的集合中查找元素,每次将集合分为左右两部分,判断解在哪个部分中并调整集合上下界,重复直到找到目标元素。 而二分法更多用于通过二分来找答案,先将答案具有的特定范围单调排序再进行二分验证。 二分最大的特点即为省时,其消耗时间为,使用二分法能最大限度节省时间有效防止超时问题。 ...原创 2019-04-27 21:56:46 · 127 阅读 · 0 评论 -
4月17日
上个周末,由于参加英语竞赛错过了一堂课,已经开始了搜索的学习。 搜索,其实就是穷举出问题的所有或部分情况从而求出问题解的一种方法。搜索相较于一般的枚举法有了一定的方向性和目的性。而这就用到了状态转移。目前,所常用的状态转移分为两种——广度优先搜索(BFS)和深度优先搜索(DFS)。广度优先搜索是按照层数一层一层来遍历的,根据队列先进先出的原理,将每一层的节点按从左到右的顺序依次放入队列中;而深度...原创 2019-04-17 23:45:06 · 119 阅读 · 0 评论 -
4月20日
最近看到参加比赛的同学日夜兼程地写代码、打比赛,虽没有亲身经历,但也感觉出了其中的紧张与激烈。 有一个同学,报名参加了比赛,作为女生,佩服她的这份坚持,同时还不得不佩服她的做题能力——对题目的理解及题型的熟练度。 继续看搜索问题,深度优先搜索可以通过递归及非递归来实现 运用递归实现: Function Dfs (Int Step, 当前状态) Begin 可加结束条件 从当前状态循环拓展下...原创 2019-04-20 23:27:35 · 159 阅读 · 0 评论 -
STL
1、栈(stack) 栈只能操作最顶端元素。 头文件: #include <stack> 定义: stack<data_type> stack_name; 操作: empty() -- 返回bool型,表示栈内是否为空 (s.empty() ) size() -- 返回栈内元素个数 (s.size() ) to...原创 2019-03-09 23:14:46 · 161 阅读 · 0 评论 -
STL总结
1、栈(stack) 栈只能操作最顶端元素。 头文件: #include <stack> 定义: stack<data_type> stack_name; 操作: empty() -- 返回bool型,表示栈内是否为空 (s.empty() ) size() -- 返回栈内元素个数 (s.size() ) top(...原创 2019-03-09 23:29:13 · 151 阅读 · 0 评论 -
3月20日总结
这周一直在做贪心的题,发现贪心的最大特点就是——读完题目后往往没有思路,无从下手;而当有思路后,代码并不会消耗太多时间。 近期的题目,关联数据比较多,往往会用到pair类型或结构体。 pair类型 pair包含两个数据值。与容器一样,pair也是一种模板类型。但在创建pair对象时,必须提供两个类型名。 pair与其他标准类型不同,可以直接访问其数据成员:其成员都是共有的,分别命名为fir...原创 2019-03-20 22:45:23 · 126 阅读 · 0 评论 -
贪心
贪心算法最主要的是思路,一般有了思路,解题过程就会简便。 且通过例题来看,往往在主函数前使用solve函数,在solve函数中提现具体解题思路过程。 贪心题需要通过具体题目要求,找出要“贪”的对象,进而思考“贪”的方法。 ...原创 2019-03-17 15:30:25 · 171 阅读 · 0 评论 -
贪心算法
//A是问题的输入集合即候选集合 Greedy(A) { S={ }; //初始解集合为空集 while (not solution(S)) //集合S没有构成问题的一个解 { x = select(A); //在候选集合A中做贪心选择 if feasible(S, x) //判断集合S中加入x后的解是否可行 S = S+{x}; A = A-{x}; } return S; }原创 2019-03-12 23:03:14 · 178 阅读 · 0 评论 -
3月23日
近期的新知识点并不是很多,主要都是做题练习。 贪心涉及到多变量的题目较多,故常用到数据结构 以背包问题举例: struct bag { int w; //物品的重量 int v; //物品的价值 double c; //性价比 }a[1001]; //存放物品的数组 排序因子(按性价比降序): bool cmp(bag a, bag b) { ...原创 2019-03-23 23:27:49 · 181 阅读 · 0 评论 -
3月27日——动态规划dp
这周开始讲动态规划。动态规划问题是在多阶段问题中求取最优解问题(每步最优以保证全局最优)。 动态规划与贪心的最大区别在于贪心只能解决部分求最优解问题,而动态规划则能全部解决。但动态规划相较于贪心更加复杂,耗时更多。但可对动态规划进行优化,排除重复计算(以空间换取时间)——记忆化搜索,将已有结果存入数组,将再次用到此结果时直接调用数组数据而非重复计算。动态规划解决问题往往是自下而上的,而贪心往往相...原创 2019-03-27 22:30:04 · 126 阅读 · 0 评论 -
4月6日
这几天是清明假期,老师说对于写代码的人来说除了春节的那几天是没有假期的。这几天,在平时的做题网站上,每天都开了五小时的竞赛,我虽没有参加,但也从同学那里看了一些题目。全英文的题目,虽说平时做的题大多也都是英文,但平时也就用有道简单的就翻译出来了,然而真正做题的时候,电子词典什么的是绝对不可能的,so:English is very important! 再就是,近期的背包问题。 01背包是最基...原创 2019-04-06 23:27:02 · 110 阅读 · 0 评论 -
5月22日
最短路径 1、Floyed算法 2、Dijkstra算法 3、Bellman-Ford算法:Ford(福特)算法,同样是用来计算从一个点到其他所有点的最短路径的算法,也是一种单源最短路径算法。能够处理存在负边权的情况,但无法处理存在负权回路的情况。 4、SPFA算法:简单的说就是队列优化的bellman-ford,利用了每个点不会更新次数太多的特点。 并查集 动态地维护和处理集合元素之...原创 2019-06-11 19:04:16 · 246 阅读 · 0 评论