摘要: 凸包 什么是凸包 假设平面上现在有若干个点,现在我们过某些点做一个多边形,是这个多边形能够将所有点都包含起来【在多边形边上也算】。当这个多边形是一个凸多边形的时候,我们称它问凸包。 可以想象为给这些点外面箍上一个橡皮筋。 解决凸包问题的算法 暴力 时间复杂度为O(n^3) 思路:先确定两个点,然后枚 阅读全文
posted @ 2021-07-14 19:39 rookie161 阅读(152) 评论(0) 推荐(0) 编辑
摘要: AcWing算法进阶课 计算几何 基础知识 1.前置知识点 (1) pi = acos(-1); (2)余弦定理:c ^ 2 = a ^ 2+ b ^ 2 - 2abcos(theta) 2.浮点数的比较 const double eps = 1e-8;int sign(double x)//符号函 阅读全文
posted @ 2021-07-14 19:11 rookie161 阅读(470) 评论(0) 推荐(0) 编辑
摘要: 线段树 最好的宝石 题目: 单值修改,区间查询,维护信息:最大值和最大值的个数 题目描述 牛牛有n个宝石,第i个宝石的价值是w[i]. 有m个操作,操作分为两种类型 − Change x y 把第x个宝石的价值改成 y − Ask l r 询问区间[l,r]内宝石的最大价值,和最大价值的宝石有多少个 阅读全文
posted @ 2021-07-11 10:03 rookie161 阅读(87) 评论(0) 推荐(0) 编辑
摘要: 涉及到最优化问题都可以尝试使用模拟退火法,比如DP问题、计算几何问题、贪心问题。 模拟退火法是一个经过优化的随机化算法,有很大概率找到最优解。 在使用这个算法的时候,题目应该具有一定的连续性。(函数的连续性比较强,有多峰的话,都可以尝试一下) 温度(步长) : 初始温度(由题目的搜索空间范围确定), 阅读全文
posted @ 2021-06-18 22:34 rookie161 阅读(308) 评论(0) 推荐(0) 编辑
摘要: Hanjo #include <bits/stdc++.h> using namespace std; int n, m, a, b; int st[20][20]; int ans = 0; void dfs(int x, int y, int a, int b) { if (a < 0) ret 阅读全文
posted @ 2021-06-18 07:08 rookie161 阅读(37) 评论(0) 推荐(0) 编辑
摘要: 单调栈 阅读全文
posted @ 2021-06-14 11:55 rookie161 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 栈 栈模拟: 单调栈: 下面四个题是连续的,单调栈->直方图中最大的矩形->城市游戏->最大面积 单调栈 描述: 给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。 输入格式 第一行包含整数 N,表示数列长度。 第二行包含 N 个整数,表示整数数列。 输出格式 阅读全文
posted @ 2021-05-30 17:32 rookie161 阅读(80) 评论(0) 推荐(0) 编辑
摘要: 体积不超过j,求max初始化为0,j>=v 体积恰好为j,求max初始化dp[j = 0] = 0,其他为-inf 体积恰好为j,求min初始化dp[j = 0] = 0, 其他为inf, 且j>=v 体积最少为j,求min初始化dp[j = 0] = 0, 其他为inf,且j不做要求 数字三角形模 阅读全文
posted @ 2021-05-28 20:16 rookie161 阅读(163) 评论(0) 推荐(0) 编辑
摘要: KMP模板: 求next数组 //求next数组 for (int i = 2, j = 0; i <= n; i ++ ) { while (j && p[j] != p[j + 1]) j = ne[j]; if (p[i] == p[j + 1]) j ++; ne[i] = j; } 处理母 阅读全文
posted @ 2021-05-24 22:30 rookie161 阅读(79) 评论(0) 推荐(0) 编辑
摘要: trie树 trie树是一种高效存储和查询字符串集合的数据结构 概念: 【算法竞赛进阶指南】:Tire(字典树)是一种用于实现字符串快速检索的多叉树结构。Trie的每个节点都拥有若干个字符指针(是trie的第二维,记录的根节点的所有儿子节点(互为兄弟节点),若在插入或检索时扫描到一个字符c,就沿着当 阅读全文
posted @ 2021-05-19 21:20 rookie161 阅读(134) 评论(0) 推荐(0) 编辑