随笔分类 -  c++——算法

上一页 1 2 3 4 5 6 ··· 8 下一页
摘要:换根dp: 第一次dfs 处理儿子点的权值 第二次dfs 处理 父亲点,和兄弟节点的权值 处理兄弟节点的时候, 利用父亲节点统一处理, 利用stl存储 斜率优化: 为什么会用到斜率优化: 在遇到转移式子是 fi x fj 的时候, 不是分开的, (分开的,直接用单调队列处理) (通常会遇到平方式子) 阅读全文
posted @ 2023-06-15 15:52 VxiaohuanV 阅读(7) 评论(0) 推荐(0) 编辑
摘要:引入 给定一个 n×m 的网格图,两个点从左下角出发,只能向上或者向右走,最后到右上角结束,求有多少种可能的方案,使得两个点的路径在除开起点和终点外的任意点不相交? 由于交换路径过后算同一种方案,我们就可以除开起点和终点,转换成A点从(1,2)出发到(m-1,n),B点从(2,1)出发到(m,n-1 阅读全文
posted @ 2023-06-13 16:47 VxiaohuanV 阅读(39) 评论(0) 推荐(0) 编辑
摘要:题意: t组样例,每组样例输入w, h, a, b, c.在坐标系中,0 <= x <= w, 0<=y<=h, 求出三个点X, Y, Z, 并且|XY| = a, |XZ| = b, |YZ| = c,求这三点坐标并依次输出 题解: 一个三角形在矩形中是合法的,那么就一定可以平移到矩阵的某个角, 阅读全文
posted @ 2023-05-24 11:10 VxiaohuanV 阅读(16) 评论(0) 推荐(0) 编辑
摘要:题面大意: 给出N个数, 找出最大的子集size 使得 子集中, 任意2个数的 二进制下, 每一位, 至少有2位不同 思路: N 只有5000, 可以直接暴力建边, 转化位图论 2种建边方式: 一种是 能在一个集合的2个数, 建一条边, (没有办法去处理这个问题) 一种是 不能在一个集合的就建一条边 阅读全文
posted @ 2023-05-24 10:32 VxiaohuanV 阅读(12) 评论(0) 推荐(0) 编辑
摘要:vector<ull> B; void insert(ull x) { for (auto b : B) x = min(x, b ^ x); for (auto &b : B) b = min(b, b ^ x); if (x) B.push_back(x); } 构造代码 这样构造产生的性质: 阅读全文
posted @ 2023-04-18 18:54 VxiaohuanV 阅读(15) 评论(0) 推荐(0) 编辑
摘要:思路: 问xor起来有没有某个值, 想到线性基 然后发现问L-R区间的集合都要表示x, 利用线性基的交集解决 在利用线段树解决区间问题 #include <iostream> using namespace std; typedef unsigned int ui; const int maxn = 阅读全文
posted @ 2023-04-18 18:38 VxiaohuanV 阅读(91) 评论(0) 推荐(0) 编辑
摘要:思路 1 换根DP: 第一次dfs 预处理出每一个儿子树的 最长距离1 和次长距离2 第二次开始换根DP, 本点到其他 点的距离最长 : 分别考虑 一个是父亲上下来的点len3, 一个是兄弟节点, 就是父亲的最长距离len1或者 次长距离len2, 根本不用换根dp, 直接就是每一个点 的 最长+第 阅读全文
posted @ 2023-04-17 16:32 VxiaohuanV 阅读(35) 评论(0) 推荐(0) 编辑
摘要:题目大意: 给出n堆石头, 给出每堆石头的数量, 问有多少对合法的 l,r 使得L,R 区间内的最大值的*2 < =区间总和 思路: 从最大值入手, ->为了方便处理 就利用分治 去 处理出当前的最大值要考虑区间范围是那些 首先通过st 表来预处理 出 l,r 的最大值的位置 分治 dfs(l,r) 阅读全文
posted @ 2023-04-13 16:14 VxiaohuanV 阅读(13) 评论(0) 推荐(0) 编辑
摘要:题目大意: 给出一个矩阵, 和M ,找到一个最大的子矩阵,使得里面的最大值-最小值的差值小于 M 思路: 关键信息是最大和最小, 就保留这个信息即可 然后考虑如何枚举每一个矩阵? 枚举矩阵的上下边界, 然后在考虑矩阵的左右边界, 左右边界处理的时候, 这一列的最大最小值,可以通过枚举上下边界的时候线 阅读全文
posted @ 2023-04-12 18:05 VxiaohuanV 阅读(13) 评论(0) 推荐(0) 编辑
摘要:思路: 利用map+list暴力模拟就彳于了 unordered_map<string,list<>::iterator > mp #pragma GCC optimize(2) #include <bits/stdc++.h> using namespace std; #define IOS io 阅读全文
posted @ 2023-04-11 18:53 VxiaohuanV 阅读(14) 评论(0) 推荐(0) 编辑
摘要:// 需要先预处理出fact[],即阶乘 inline ll C(ll m, ll n, ll p) { return m < n ? 0 : fact[m] * inv(fact[n], p) % p * inv(fact[m - n], p) % p; } inline ll lucas(ll 阅读全文
posted @ 2023-04-06 21:34 VxiaohuanV 阅读(6) 评论(0) 推荐(0) 编辑
摘要:题目大意: 给出一个01矩阵, 给出q,p 分别表示 选一个点的权值,和选2个连在一起的点的权值 问如何让权值更大 注意 : 在Dinic 的时间复杂度对于二分图这种边权为1, 时间复杂度为 NsqrtN, 不是n^2 m 思路: 更具题目的条件限制,他的建边一定是2个矮在一起的 因此更具 (i+j 阅读全文
posted @ 2023-04-04 09:28 VxiaohuanV 阅读(23) 评论(0) 推荐(0) 编辑
摘要:题目大意: 就是这个游戏,有6个音轨, 然后用单手操作,(5个手指头)最多只能操作5个音轨的内容, 给出每一个音轨的情况, 问, 最多可以拿多少分 思路: 利用扫描线, 在同一个时刻内,尽可能的拿多的分数->有多少拿多少,有6个->拿5个 因此就利用减法思维: 先把6个总的分拿到 - 6个音轨同时出 阅读全文
posted @ 2023-04-02 15:57 VxiaohuanV 阅读(226) 评论(0) 推荐(1) 编辑
摘要:用于: 统计数位于数位的相关信息的计数问题, 通常会问在某个区间内, 利用减法思维,这样就会减少一个边界的判断 此时就会只有一个边界, 这个边界 利用 lim 处理, 在暴力枚举的时候不要超过lim 就行了 记忆化搜索递归的过程, 就是一个完全的暴力, 不过有记忆化搜索, 所以他的时间复杂度是 DP 阅读全文
posted @ 2023-03-30 21:11 VxiaohuanV 阅读(63) 评论(0) 推荐(0) 编辑
摘要:思路: 看到数据范围很小, 暴力, 不是n^n 暴力,而是 利用next_permutation(p+1,p+1+n); n!去实现这个东东 do .... while(next_permutation(p+1,p+1+n)); 牛逼, 这个只能用数组,不能结构体,于是就新建一个这个数组然后去映射就 阅读全文
posted @ 2023-03-28 23:59 VxiaohuanV 阅读(9) 评论(0) 推荐(0) 编辑
摘要:思路: 关键是操作2的性质: 随机找->找一个路径最长的点 操作1,阻止建边顾名思义, 发现和最短路很想, 从n到每一个点的权值嘛 改变权值更新方式, 边的权值为: val[i]+前面那个点是第几大的, (这里每一个出度的点都要算) ->满足题目要求 然后 这个第几大,利用出度来优化, 更新一个后就 阅读全文
posted @ 2023-03-28 23:48 VxiaohuanV 阅读(12) 评论(0) 推荐(0) 编辑
摘要:博弈题 都可以搜索做 (不考虑时间复杂度时) 发现3x3可以接受, 用记忆化搜索优化一下 情况通过hash思想得到 直接就 3进制去get (不用去mod) 阅读全文
posted @ 2023-03-23 21:53 VxiaohuanV 阅读(18) 评论(0) 推荐(0) 编辑
摘要:题目大意: 给出一个树, 每一个节点有一个 ai值 和bi值 阅读全文
posted @ 2023-03-23 00:25 VxiaohuanV 阅读(23) 评论(0) 推荐(0) 编辑
摘要:思路: 第一眼看到这个题,就准备直接用莫队去做, 每一次l ,r 第一次遇到一个数的次数是奇数就不做处理, 之后就要^异或一下来处理, 次数是偶数本来就要处理, 就不用说了, 这样就符合题意 不过出题人,把莫队卡掉了 首先可以根据异或性质 把问题转化为 A 通过前缀思想处理 B通过对询问排序后处理 阅读全文
posted @ 2023-03-22 23:38 VxiaohuanV 阅读(34) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 ··· 8 下一页