![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法竞赛训练指南
qq_38232157
这个作者很懒,什么都没留下…
展开
-
POJ 1962 Corporative Network(算法竞赛训练指南,带权并查集)
算法竞赛训练指南192页,带权并查集 本题要点: 1、命令处理: 查询命令,E u, 先查询 u 的父节点, get(u), 然后 输出 u到根节点的距离 d[u]. 查询的时候,使用了路径压缩。同时累加 d[x] += d[fa[x]] 2、I u v ,把 u的父节点设为v, 题目说明了当前的u点是没有父节点的。 fa[x] = y, d[x] = abs(x - y) % 1000; #include <cstdio> #include <cstring> #include &原创 2020-08-12 14:04:44 · 105 阅读 · 0 评论 -
UVA 11039 Building designing(算法竞赛训练指南,排序)
算法竞赛训练指南78页,排序 题目意思: 有n个非0的整数,要求按某种顺序排,使得这些数的绝对值从小到大,而且 正数和负数间隔排列。 本题要点: 1、用结构体 node 来记录每一个数的绝对值 和正负, 按绝对值排序, 然后从左到右扫描,找出正负相隔的一个数列。 #include <iostream> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #原创 2020-08-12 13:53:45 · 116 阅读 · 0 评论 -
UVA 1160 X-Plosives(算法竞赛训练指南,并查集)
并查集, 算法竞赛训练指南, 191页 题目意思: 所以的元素看做是顶点,每两点连线,如果图中存在环的话,就会爆炸 本题要点: 1、每次读入 a, b, 如果 a 和 b 在同一个集合,就舍弃这两点。 #include <cstdio> #include <cstring> #include <iostream> using namespace std; const int MaxN = 100010; int a[MaxN], b[MaxN], fa[MaxN]; in原创 2020-08-10 16:08:18 · 104 阅读 · 0 评论 -
LA 3695 Distant Galaxy(训练指南, 枚举扫描)
算法竞赛训练指南,52页,枚举,线性扫描 本题要点: 1、每个点,先按x坐标排序, 算出单独的y左边有m个,然后遍历 y坐标的上届和下届 for(int a = 0; a < m; ++a) // 下届 { for(int b = a + 1; b < n; ++b) //上届 {} } 在上届和下届确定的情况下, 求出一个长方形包含最多的点数 2、几个数组的意义, 数组的坐标指的是,该点的x坐标,排在所有单独坐标的排名, 每一个单独坐标对应一条竖线: Left[MaxN] //Left[i原创 2020-05-24 23:21:02 · 129 阅读 · 0 评论 -
UVa 1326 Jurassic Remains(训练指南, 位运算)
算法竞赛训练指南,57页 本题要点: 1、位运算 1)每一个字符串都是大写字母组成,因此,每一个字符串用一个整数的二进制表示, 比如: “ABD” 用二进制整数 (1011) = 11 来表示 2)字符串数量很小, n <= 24; 可以用 一个 整数 的二进制 数位表示是否选择了第i个字符串 比如: (0011001) == 25 表示选择了第 0, 第3 和 第4 个字符串 2、 先计算 前一半 n / 2 个字符串可能得到的 异或值。 n / 2 个字符串 中,选择第i个字符串或不选第i个字符串原创 2020-05-24 18:54:40 · 110 阅读 · 0 评论 -
UVa 10755 Garbage Heap (训练指南,三维前缀和)
算法竞赛训练指南,54 页, 三维的前缀和 本题要点: 1、 定义前缀和: 将长方体切片(按z左边), 每一片就是一个平面; sum[i][j][k]平面上[1,1]到[i][j]在高度为 z == k 时的区域前缀和; 二维的前缀和公式: sum(x, y) = array[x][y] + sum(x - 1, y) + sum(x, y - 1) - sum(x - 1, y - 1) 2、求解最大和 的子 长方体: 遍历底面的左边范围 [x1, x2], [y1, y2] (此时相当于固定了底面),原创 2020-05-24 13:23:03 · 177 阅读 · 0 评论 -
LA 2678 Subsequence (训练指南,尺取法)
算法竞赛训练指南, 48 页 注意: 1、尺取法,滑动窗口 [L, R] 使得区间内的数的和 大于等于 s , 然后更新最小的区间差值 R - L + 1 2、无解的时候,输出 0 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int MaxN = 100010; int n, s; int seq原创 2020-05-23 15:56:45 · 98 阅读 · 0 评论 -
UVa 11549 Calculator Conundrum (训练指南,Floyd 判圈算法)
算法竞赛训练指南, 42 页 注意: 1、 用数组来记录一个数的各位的数字 2、 快慢指针来记录链表环的入点(Floyd 判圈算法) #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int N, K, Test; int next(int n, int k) { if(0 == k) { return原创 2020-05-23 15:52:08 · 105 阅读 · 0 评论 -
LA3177 Beijing Guards (训练指南,贪心, 二分)
题意: n个人围成一圈,第i个人想要ri个不同的礼物,相邻的两个人礼物类型不能重复。 每种礼物不限量,求最少需要多少种礼物才行(1<=n<=100000) 训练指南, 37页。 分类讨论,n为偶数和奇数时。 n为偶数情况, p = max{r[i] + r[i + 1]} (1 <= i <= n) //记 r[n + 1] = r[1] 本题要点: 1、贪心来分析奇数情况 对应第一人,需要礼物 r[1], 用 r[1] 将 所有礼物分为两部分, 1 ~ r[1] 和 r[1] +原创 2020-05-16 22:34:05 · 159 阅读 · 0 评论 -
UVa 11520 Fill the Square (训练指南)
训练指南,33页 1、从左到由,从上到下,依次扫描每一个字符。 如果 grid[i][j] == ‘.’, 那么,就在位置(i, j) 写上一个最小的大写字母。 该字母和 (i, j) 上下左右 4 个位置的字母不相同 2、 简单的水题。 #include <cstdio> #include <cstring> #include <iostream> using namespace std; const int MaxN = 10 + 5; int n, Test; c原创 2020-05-16 16:04:57 · 76 阅读 · 0 评论 -
LA 4329 Ping pong (树状数组)
树状数组的典型应用, 参看 《算法笔记》 475页 对于有n个数的数组 A(A[1] ~ A[n]), 对于每一个元素,求出序列中,它的左边比它小的数的个数 本题要点: 1、 题目见,《训练指南》 197 页 2、 ans 要用 long long 3、 输入的数组个数最大值为 20000, 每个 a[i] 的最大值为 100000, 代码的 const int MaxN = 100010 //如果 const int MaxN = 20010, runtime error #include <cs原创 2020-05-15 01:47:44 · 104 阅读 · 0 评论 -
UVa 11235 Frequent values (RMQ)
算法竞赛训练指南,198 页 本题要点: 1、对 int count[MaxN]; //第i段出现的次数 进行RMQ count 数组的坐标是从1开始的,而数组 d[MaxN][20]则从 0 开始, 在函数RMQ_init 中注意一下 2、根据指南书中的解题思路,关键是求出4个数组出来 int count[MaxN]; //第i段出现的次数 int num[MaxN]; //num[p] 表示位置p所在段的编号 int Left[MaxN]; //Left[p] 表示位置p所在段的左端点 int Ri原创 2020-05-14 22:35:27 · 102 阅读 · 0 评论 -
UVa 10881 Piotr's Ants (排序)
题目意思: 算法竞赛训练指南。 9 页 1、 掉头等于 对穿而过 2、 每一只蚂蚁的相对位置都是没有改变的 #include <algorithm> #include <cstdio> #include <cstring> #include <iostream> using namespace std; const int MaxN = 10010; int Test; int L, T, N; char direc[2] = {0};//表示状态 int原创 2020-05-14 00:29:35 · 76 阅读 · 0 评论 -
LA 3971 Assemble(二分查找,stl)
题目意思: 算法竞赛入门经典训练指南,18 页 本题要点: 1、求解 “最小值的最大”,常用二分查找 二分查找x, 判断是否有总价格不大于 b 的,而且配件最小因子都不小于 x的电脑。 2、 使用map 来存储 每种配件对应的 名字和id号 使用vector 来存储每种配件 的所有的类型 #include <cstdio> #include <cstring> #include <iostream> #include <vector> #include <原创 2020-05-13 23:24:27 · 150 阅读 · 0 评论