算法竞赛训练指南
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 · 114 阅读 · 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 · 142 阅读 · 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 · 114 阅读 · 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 · 135 阅读 · 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 · 116 阅读 · 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 · 263 阅读 · 0 评论 -
LA 2678 Subsequence (训练指南,尺取法)
算法竞赛训练指南, 48 页注意:1、尺取法,滑动窗口 [L, R] 使得区间内的数的和 大于等于 s , 然后更新最小的区间差值 R - L + 12、无解的时候,输出 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 · 104 阅读 · 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 · 142 阅读 · 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 · 189 阅读 · 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 · 85 阅读 · 0 评论 -
LA 4329 Ping pong (树状数组)
树状数组的典型应用, 参看 《算法笔记》 475页对于有n个数的数组 A(A[1] ~ A[n]), 对于每一个元素,求出序列中,它的左边比它小的数的个数本题要点:1、 题目见,《训练指南》 197 页2、 ans 要用 long long3、 输入的数组个数最大值为 20000, 每个 a[i] 的最大值为 100000,代码的 const int MaxN = 100010 //如果 const int MaxN = 20010, runtime error#include <cs原创 2020-05-15 01:47:44 · 113 阅读 · 0 评论 -
UVa 11235 Frequent values (RMQ)
算法竞赛训练指南,198 页本题要点:1、对 int count[MaxN]; //第i段出现的次数进行RMQcount 数组的坐标是从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 · 107 阅读 · 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 · 81 阅读 · 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 · 157 阅读 · 0 评论