03 2024 档案
摘要:题意: 区间更新区间查询 思路:直接线段树实现就行,难点还是手撕线段树的结构跟细节。 说一下merge:直接对两个区间的sum求和。applyLazy:lazy值*区间长度。 struct Node{ bool is_lazy; long long sum = 0; long long lazy_v
阅读全文
摘要:题意:n个点,求出每个点的左边,右边,第一个比他高的点。 思路:单调栈。 void solve(){ int n; cin >> n; vector<int> a(n); for (auto&x : a){ cin >> x; } stack<int> stk; vector<pair<int, i
阅读全文
摘要:1 意义:线段是是为了对区间中的元素进行操作,而衍生出来的一种数据结构,比如区间加减,区间求和。 线段树将1~n的区间分解成4n个小区间。 2 过程:区间修改就是对一个或者多个节点按照设定的规则对数值进行修改。区间查询就是对一个或多个节点查询的结果按规则进行合并,得到最终结果。 其中区间修改增加了懒
阅读全文
摘要:题意:n个点m条边的图,q个询问,每个询问指定两个点u和v。问从u到v的路径中,最小权重的最大值最多是多少。 思路:step1,因为是图,所以路径有很多。这里基于贪念的思想,优先选择权重大的边走,找出一条最合适的路径。 所以直接对图构建最大生成树,让每个连通块的路径都是最大路径。 step2,构建最
阅读全文
摘要:基于有根树。 1 作用:可以找到离两个点最近的公共点,这个公共点也可以作为唯一路径的一个中间点。如果记录了两个点到这个公共点的一些数据,就可以处理一些问题。 2 实现方法:基于倍增的思想,对每个点记录了2的整数次方的距离条件下的每个祖先,可以通过递推来解决。 3 注意事项:最大深度应该是不超过n的一
阅读全文
摘要:1 为什么要写kmp? 因为find暴力匹配函数,时间复杂度过高,因为s串指针回溯问题。 2 为了避免s串指针回溯,对t串构建kmp表,该表记录了当前位置匹配失效时,下一个比较的下标。 3 原理?next表表示了当前下标j的最长公共前后缀长度,因为下标从0开始,这个长度也是最长公共前缀的下一个位置,
阅读全文
摘要:写模板: 1 确定树的节点指针数量 2 确定起始字符 3 实现插入方法 4 根据题目编写求解方法,或者添加计数元素到节点中 struct Node{ array<int, 100> next{}; int cnt = 0; }; class Trie{ public: Trie(char start
阅读全文
摘要:题意:区间长度为n,m个查询。每次查询给出区间与一个数值0或者1,代表区间内的1的个数。找出不矛盾的最后一个询问。 思路:首先用到区间压缩,排序后去重即可。使用带权dsu,如果是同一个root,那么xor运算看是否符合输入。如果不是同一个root,直接合并。这里合并区间的时候权重更新有点抽象,xx合
阅读全文
摘要:题意:n * m的方格,有的格子是数字,是数字的格子代表了相邻(包括自己)的9个格子内颜色值为1的格子有这么多个。给出这个方格,求满足条件的颜色方格,保证答案唯一。 n <= 10, m <= 10。 思路:想不出好办法,直接暴力+剪枝。 暴力好说,01dfs即可,关键是如何剪枝。剪枝肯定是已经不会
阅读全文
摘要:class FenwickTree{ public: FenwickTree(int sz): sz_(sz){ ft_.resize(sz_); } FenwickTree(vector<long long>& f){ sz_ = int(f.size()); ft_.assign(sz_, 0)
阅读全文
摘要:class FenwickTree{ public: FenwickTree(int sz): sz_(sz){ ft_.resize(sz_); } FenwickTree(vector<long long>& f){ sz_ = int(f.size()); ft_.assign(sz_, 0)
阅读全文
摘要:1 根据长度初始化, 单点更新, 区间查询。 可以查询区间和(输入为位置+数值), 可以查询区间内频次(输入为数值+频次1)。 2 根据输入数据线性初始化。 3 根据输入数据频次线性初始化,区间更新,单点查询。 根据差分后的数组求前缀和(单点查询)。 class FenwickTree{ publi
阅读全文
摘要:题意:n个点,m条边,问有哪条边是去掉之后,会造成之前连通的点不再连通的?n <= 150, m <= 5000. 思路:连通算法有dfs+bool数组记录,或者dsu,感觉dsu更方便。m * n 不超过1e6,直接暴力。 class DisjointSet{ public: DisjointSe
阅读全文
摘要:1: 实现路径压缩并查集,查找,合并,判同集合。 2: 获取集合大小,集合数量。 3: 增加权重,查询单个元素到集合代表元素的权重。 4: 增加获取集合中元素的功能。 以C++的三大特性之一封装来写该模块,代码量大概是90行左右。 用到的库: vector, nnumeric(iota函数)。 cl
阅读全文
摘要:题意:求非空连续子区间最大和 思路:贪心解决。 void solve(){ int n; cin >> n; long long ans = -1e18; long long cur = 0; for (int i = 0; i < n; ++i){ int t; cin >> t; cur +=
阅读全文
摘要:题意:n个零食,每个零食有k种配料,一共有m种配料。问最少吃几包零食,可以吃到所有配料。 n <= 100, m <= 20, k <= m。 思路:最优化问题,如果n <= 20可以直接bf,这里m <= 20,对m进行状态压缩,正确的解法应该是线性dp + 状态压缩。 总结:很容易陷入一个哈密顿
阅读全文
摘要:https://codeforces.com/problemset/problem/1332/B void solve(){ int n; cin >> n; vector<vector<int>> ans(1234); for (int i = 0; i < n; ++i){ int t; cin
阅读全文
摘要:https://codeforces.com/problemset/problem/1355/D We have a constructive problem where we need to construce an array with a required sum value using n
阅读全文
摘要:https://codeforces.com/contest/977/problem/D void solve(){ int n; cin >> n; vector<pair<int, long long>> a(n); for (auto&[x, y] : a){ cin >> y; x = 0;
阅读全文
摘要:这是一个dp题,可以用4维数据来表示所有的状态。 但是有一个需要注意的点,一般来说,对于每个坐标,有拿跟不拿两种情况,如果没有拿任务宝物的状态表示为0,那么拿取了价值为0的宝物时,要以另一种情况来跟没拿区分。 处理的方法就是将所有宝物的价格+1。 long long dp[55][55][15][1
阅读全文
摘要:It's a simple problem on codeforces. we traverse the through the string n, if we encouter a '1', we add a new string to ans and set stop to false.Othe
阅读全文
摘要:https://codeforces.com/problemset/problem/762/A This is a easy problem based on number theory. We just simply iterate i from 1 to the value of sqrt(n)
阅读全文
摘要:https://codeforces.com/problemset/problem/277/A It presents a problem that we need to make all element connected, it can be solved by using dsu. I did
阅读全文
摘要:https://codeforces.com/problemset/problem/1490/E This is a chanllenging problem on codeforces with a diffcuilty score of 1400. It can be solved by usi
阅读全文
摘要:This a constructive problem on codeforces with a diffcuilty score of 1400. https://codeforces.com/problemset/problem/1463/B It's evident that we can a
阅读全文
摘要:https://codeforces.com/problemset/problem/550/B Brute force problem void solve(){ int n, l, r, x; cin >> n >> l >> r >> x; vector<int> a(n); for(auto&
阅读全文
摘要:https://codeforces.com/problemset/problem/1369/C This is a hard problem on codefores with a diffcuilty score of 1400 It can also be solved by using th
阅读全文