
算法竞赛入门经典
哥布林军团
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法竞赛入门经典第11章 最小生成树 Kruskal(克鲁斯卡尔)算法 和 Prim(普利姆)算法 详解及C++实现
考虑几个城市之间需要道路聯通What is a Spanning Tree?Given an undirected and connected graph , a spanning tree of the graph is a tree that spans (that is, it includes every vertex of ) and is a subgraph of (eve...原创 2020-03-05 04:28:14 · 544 阅读 · 0 评论 -
算法竞赛入门经典第11章 表达式树
题目:给出一个由数字及’+’,’-’,‘x’,’/’ 以及括号组成的合法算式,将其转化为表达式树。表达式树的所有树叶都是操作数,非叶子节点都是运算符。由于给出的运算符都是二元运算符,因此这道题得到的树一定是二叉树。可以先寻找“最后计算的运算符”,将这个运算符作为一个结点,然后递归计算运算符左右两个算式,计算结果作为该节点的左右儿子。直接上代码,需要注意的问题都写在注释里。#include&l...原创 2020-03-05 03:27:04 · 272 阅读 · 0 评论 -
算法竞赛入门经典第11章 无根树转有根树
题目:输入一个n个结点的无根树的各条边,并指定一个根节点,要求把该树转化为有根树,输出各个节点的父亲编号,n≤106n\leq10 ^6n≤106。可以把无根树看作无向无环且连通的稀疏图,所要做的就是从指定节点开始,深度搜索遍历所有节点,每次遍历等同于从根节点到叶子节点的过程,遍历过程中经过的节点按照先后保存为父亲节点和子节点。...原创 2020-03-05 03:01:28 · 798 阅读 · 0 评论 -
简单区间问题 选择不相交区间 区间选点 区间覆盖问题解答及代码 C++
1. 选择不相交区间数轴上有n个开区间(ai,bi)(a_i, b_i)(ai,bi)。选择尽量多个区间,使得这些区间没有公共点。这是最简单的区间问题,很多区间问题都需要先排序,要么对aia_iai排序,要么对bib_ibi排序。这道题直接将区间按照bib_ibi排序,第一个区间一定要选择,然后选择下一个符合条件的区间(不与第一个区间重叠),以此类推。数据(5,7), (1,2),...原创 2020-03-02 23:28:17 · 709 阅读 · 0 评论 -
算法竞赛入门经典第八章 巨人与鬼问题(点配对问题)详细图解 C++
问题:在平面上有n个巨人和n个鬼,没有三者在同一直线上。每个巨人需要选择一个不同的鬼,向其发送质子流消灭它。质子流由巨人发射,沿直线前进,遇到鬼后小时。由于质子流交叉是很危险的,所有质子流经过的线段不能有交点,请设计一种给巨人和鬼配对的方法。说了这么多,其实题目就是平面上有偶数个点,两两配对并连线,找出连线不相交的配对方法。给出一组数据(3,4),(-9,0),(0,-5),(9,5),(-9,...原创 2020-02-29 00:39:07 · 1069 阅读 · 2 评论 -
算法竞赛入门经典第八章 递归与分治 循环日程表问题
题目:有n=2kn=2^kn=2k个运动员进行网球循环大赛,需要设计比赛日程表。每个选手必须与其他n-1个选手各赛一次;循环赛一共进行n-1天。按此要求设计一张比赛日程表,它有n行和n-1列,第i行第j列为第i个选手第j天遇到的对手。如果只有两个选手,那么第一天1与2比赛,第二天2与1比赛,如下:如果有四个选手,如下:这是其中一种排法,比较容易理解。我们直接建立了n*n的数组,第一列储存...原创 2020-02-28 07:54:49 · 387 阅读 · 0 评论 -
算法竞赛入门经典第十章学习笔记 杨辉三角形(Pascal's triangle)
杨辉三角Pascal’s triangle)如下:其中每个格子是上一行与它相邻两个格子的和,最左和最右的格子值为1。如何快速推算出杨辉三角的第n行排列(n从0开始)?最容易想到的方法是由第一行开始递推,使用数组v储存结果,数组temp储存上一行:void pascal(int n, vector<int> &v){ vector<int> temp(n+...原创 2020-02-28 04:51:35 · 368 阅读 · 0 评论 -
算法竞赛入门经典第八章 递归与分治之棋盘覆盖问题
题目:有一个2k∗2k2^k*2^k2k∗2k的方格棋盘,恰有一个方格是黑色的,其他为白色。你的任务是用包含3个方格的L型牌覆盖所有白色方格。黑色方格不能被覆盖,且任意一个白色方格不能同时被两个或更多牌覆盖。由于棋盘是2k∗2k2^k*2^k2k∗2k的,很容易在中间横竖各一刀划分为4个2k−1∗2k−12^{k-1}*2^{k-1}2k−1∗2k−1的小棋盘,继续划分一直到k=1,成为2∗22...原创 2020-02-28 04:48:10 · 494 阅读 · 0 评论 -
[仅代码]算法竞赛入门经典第八章 归并排序 快速排序 二分查找 上限upper_bound和下限lower_bound C++
归并排序merge sort:void merge_sort(vector<int> &v, int x, int y){ vector<int> temp; if(y-x == 1)return; int m = x + (y - x) / 2; merge_sort(v, x, m); merge_sort(v, m, y); int i = x...原创 2020-02-28 03:02:52 · 189 阅读 · 0 评论 -
算法竞赛入门经典第八章 最大连续和问题4种非暴力解法 CPP
题目:给出一个长度为n的序列A1,A2,...,AnA_1, A_2, ..., A_nA1,A2,...,An,求最大连续和。换句话说,要求找到1≤i≤j≤n1\leq i\leq j\leq n1≤i≤j≤n,使得Ai+Ai+1+...+AjA_i+A_{i+1}+...+A_jAi+Ai+1+...+Aj尽量大。如果暴力枚举,时间复杂度是O(n3)O(n^3)O(n3)。第一种...原创 2020-02-27 23:48:39 · 180 阅读 · 0 评论 -
算法竞赛入门经典第十章学习笔记 大整数取模 幂取模
10-1 大整数取模题目:输入整整数n和m,输出n mod m的值。n≤10100,m≤109n\leq 10^{100},m\leq 10^9n≤10100,m≤109。这道题的特别之处在于n的范围很大,无法用整型变量保存和直接计算。大整数n用两个字符串保存,m可以用整型保存。我们可以将n的每位数字分离,变成如下形式:abcde=((((a×10+b)×10+c)×10+d)×10+e)ab...原创 2020-02-27 02:05:56 · 453 阅读 · 0 评论 -
算法竞赛入门经典第十章学习笔记 无平凡因子的数 素数/质数查找打表
无平方因子的数」题目:给出整整数n和m,区间[n,m]内的“无平方因子的数”有多少个?正数p无平方因子当且仅当不存在k>1,使得p是k2k^2k2的倍数。1≤n≤m≤1012,m−n≤1071\leq{n}\leq{m}\leq{10^{12}},m-n\leq{10^7}1≤n≤m≤1012,m−n≤107。首先需要理解什么是无平方因子的数。无平方因子的数是值将一个数分解,其因数中,没...原创 2020-02-27 00:28:36 · 491 阅读 · 1 评论 -
算法竞赛入门经典第十章学习笔记 除法表达式 最大公约数
除法表达式题目:给出除法表达式:X1/X2/X3/.../XkX_1/X_2/X_3/.../X_kX1/X2/X3/.../Xk,其中XiX_iXi是整数。除法表达式应当按照从左到右的顺序求和,例如表达式1/2/1/21/2/1/21/2/1/2的值为1/41/41/4。但可以在表达式中嵌入括号以改变计算顺序,例如表达式(1/2)/(1/2)(1/2)/(1/2)(1/2)/(1/2...原创 2020-02-26 23:08:02 · 182 阅读 · 0 评论