ACM
蟠修
这个作者很懒,什么都没留下…
展开
-
ACM程序设计基础课开课
2019年2月25日晚上七点,再一次来到有关“程序设计”的课堂,这次,老师针对ACM/ICPC进行了全面且具体的介绍,让我们深刻了解开设这门课程的目的,而自己亦有修学这门课程的理由。目前,全国范围内含金量最高的计算机赛事便是ICPC和CCPC。现在的自己比不了从小就开始接触编程的别人,但只要肯付出,亦有可能收获一定的成绩。那么,便从现在做起,从开始的STL学起。...原创 2019-02-26 22:31:32 · 190 阅读 · 0 评论 -
5月1日
二分法的拓展——三分法不同于二分法中数据的单调性,三分法可用于求解某凸性或凹性函数的极值,由于通过函数本身表达式并不容易求解,故可以用三分法不断逼近求解。三分法类似二分的定义Left和Rightmid = (Left + Right) / 2midmid = (mid + Right) / 2;如果mid靠近极值点,则Right = midmid;否则(即midmid靠近极...原创 2019-05-02 19:54:42 · 100 阅读 · 0 评论 -
5月4日
单调队列单调队列中元素具有单调性,队首和队尾都可进行出队操作,而只有对位可以进行入队操作。若在单调队列中插入元素,若插入的元素破坏单调性,则删除队尾元素直到插入的元素不再破坏单调性为止。往往用于取最优值——访问首尾元素。小知识:使用freopen("1.txt","r",stdin); 该语句可直接导入样例数据,无需重复多次输入样例,大大的节省了时间,同时也提高了输入的准确率。...原创 2019-05-04 23:39:34 · 87 阅读 · 0 评论 -
4月24日
这段时间对搜索有了一定的了解,对深搜和广搜也有了一定的认识,知道了两者之间的区别以及何时使用哪种搜索方式。深搜可以说是“一条路走到黑”,它能列举出所有的可能,将所有情况全部枚举出来。而广搜则是耗时最短——最快速的搜索。根据不同的题目,采用不同的方法。今天在上数分课的时候讲到梯度,引出“盲人下山”(找到最快捷的下山方式),若将其编程,则就是广搜问题。同时,上节课还开了新的专题——二分,这里的...原创 2019-04-24 23:25:28 · 97 阅读 · 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 · 87 阅读 · 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 · 104 阅读 · 0 评论 -
5月15日
数据结构——堆堆结构是一种数组对象,它可以被视为一棵完全二叉树。树中每个结点与数组中存放该结点中值的那个元素相对应。堆分为大根堆和小根堆(大根堆即为父结点大于子结点,小根堆则相反)。对堆的操作主要有两个:put和get。put指加入元素,get则从堆中取出并删除一个元素。堆的应用:经典的Huffman树问题。Huffman树的构造方法如下:从森林里取两个权和最小的结点; ...原创 2019-05-15 23:57:14 · 137 阅读 · 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 · 103 阅读 · 0 评论 -
5月25日
并查集的作用:查询两点是否联通,即两点的关系。于是在用克鲁斯卡尔建造最小生成树时,可以用并查集判断是否需要加入此边,也可以查询u到v的路径中的最小边权。并查集可以通过压缩路径进而大大减少复杂度,从而A一题。并查集的实现操作步骤:建立一个新的集合,将包含x和y的动态集合合并为一个新的集合,返回一个指向包含x的集合的代表。判断元素是否属于同一集合:bool judge(int ...原创 2019-05-26 02:21:01 · 114 阅读 · 0 评论 -
4月27日
搜索专题结束了……二分查找是二分算法中最简单基础的一类题目,在一个单调有序的集合中查找元素,每次将集合分为左右两部分,判断解在哪个部分中并调整集合上下界,重复直到找到目标元素。而二分法更多用于通过二分来找答案,先将答案具有的特定范围单调排序再进行二分验证。二分最大的特点即为省时,其消耗时间为,使用二分法能最大限度节省时间有效防止超时问题。...原创 2019-04-27 21:56:46 · 88 阅读 · 0 评论 -
4月17日
上个周末,由于参加英语竞赛错过了一堂课,已经开始了搜索的学习。搜索,其实就是穷举出问题的所有或部分情况从而求出问题解的一种方法。搜索相较于一般的枚举法有了一定的方向性和目的性。而这就用到了状态转移。目前,所常用的状态转移分为两种——广度优先搜索(BFS)和深度优先搜索(DFS)。广度优先搜索是按照层数一层一层来遍历的,根据队列先进先出的原理,将每一层的节点按从左到右的顺序依次放入队列中;而深度...原创 2019-04-17 23:45:06 · 85 阅读 · 0 评论 -
4月20日
最近看到参加比赛的同学日夜兼程地写代码、打比赛,虽没有亲身经历,但也感觉出了其中的紧张与激烈。 有一个同学,报名参加了比赛,作为女生,佩服她的这份坚持,同时还不得不佩服她的做题能力——对题目的理解及题型的熟练度。继续看搜索问题,深度优先搜索可以通过递归及非递归来实现运用递归实现:Function Dfs (Int Step, 当前状态)Begin可加结束条件从当前状态循环拓展下...原创 2019-04-20 23:27:35 · 131 阅读 · 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 · 111 阅读 · 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 · 110 阅读 · 0 评论 -
3月20日总结
这周一直在做贪心的题,发现贪心的最大特点就是——读完题目后往往没有思路,无从下手;而当有思路后,代码并不会消耗太多时间。近期的题目,关联数据比较多,往往会用到pair类型或结构体。pair类型pair包含两个数据值。与容器一样,pair也是一种模板类型。但在创建pair对象时,必须提供两个类型名。pair与其他标准类型不同,可以直接访问其数据成员:其成员都是共有的,分别命名为fir...原创 2019-03-20 22:45:23 · 90 阅读 · 0 评论 -
贪心
贪心算法最主要的是思路,一般有了思路,解题过程就会简便。且通过例题来看,往往在主函数前使用solve函数,在solve函数中提现具体解题思路过程。贪心题需要通过具体题目要求,找出要“贪”的对象,进而思考“贪”的方法。...原创 2019-03-17 15:30:25 · 138 阅读 · 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 · 148 阅读 · 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 · 150 阅读 · 0 评论 -
3月27日——动态规划dp
这周开始讲动态规划。动态规划问题是在多阶段问题中求取最优解问题(每步最优以保证全局最优)。动态规划与贪心的最大区别在于贪心只能解决部分求最优解问题,而动态规划则能全部解决。但动态规划相较于贪心更加复杂,耗时更多。但可对动态规划进行优化,排除重复计算(以空间换取时间)——记忆化搜索,将已有结果存入数组,将再次用到此结果时直接调用数组数据而非重复计算。动态规划解决问题往往是自下而上的,而贪心往往相...原创 2019-03-27 22:30:04 · 97 阅读 · 0 评论 -
4月6日
这几天是清明假期,老师说对于写代码的人来说除了春节的那几天是没有假期的。这几天,在平时的做题网站上,每天都开了五小时的竞赛,我虽没有参加,但也从同学那里看了一些题目。全英文的题目,虽说平时做的题大多也都是英文,但平时也就用有道简单的就翻译出来了,然而真正做题的时候,电子词典什么的是绝对不可能的,so:English is very important!再就是,近期的背包问题。01背包是最基...原创 2019-04-06 23:27:02 · 78 阅读 · 0 评论 -
5月22日
最短路径1、Floyed算法2、Dijkstra算法3、Bellman-Ford算法:Ford(福特)算法,同样是用来计算从一个点到其他所有点的最短路径的算法,也是一种单源最短路径算法。能够处理存在负边权的情况,但无法处理存在负权回路的情况。4、SPFA算法:简单的说就是队列优化的bellman-ford,利用了每个点不会更新次数太多的特点。并查集动态地维护和处理集合元素之...原创 2019-06-11 19:04:16 · 184 阅读 · 0 评论