11 2022 档案
摘要:使用C++ STL中的list<int> li为例。 list.insert(it, x)的解释 在it所对应的节点的前面插入节点x。 注:list.begin()对应链表中第一个节点。 头插法 li.push_front(x); // li.insert(li.begin(), x); 尾插法 l
阅读全文
摘要:洛谷-1020 思路 由这篇blog可以知道本题求的就是 最长上升子序列 和 最长下降子序列 的长度。 采用的是 的做法。 有一个问题,在求最长上升子序列的过程中,用到了lower_bound函数,求第一个大于等于t的数; 这里不能使用upper_bound函数,因为它求的是第一个
阅读全文
摘要:HDU-1257 思路 最少需要的防御系统个数就是最大上升子序列的长度。(Dilworth定理) 这篇blog介绍了Dilworth定理。 Code 的LIS #include <bits/stdc++.h> using namespace std; #define _u_u_ io
阅读全文
摘要:# 数据结构课程-关键路径 ## 拓扑排序 判环 + bfs(栈实现) ```cpp #include using namespace std; inline void _A_A_(); signed main() {_A_A_();return 0;} const int maxn = 1e3 +
阅读全文
摘要:洛谷-1347 思路 此题解的思路再加上这篇blog的代码实现。 注意:本题要求的不是一个拓扑排序就可以了,实际上是要求一条链的拓扑排序。 Code #include <bits/stdc++.h> using namespace std; #define _u_u_ ios::sync_with_
阅读全文
摘要:A - Shift 题意 给一个长度为 的数组,有 次操作,每次操作会将数组最前面的元素删掉,再在数组最后面加上一个0元素,问 次操作后的数组中的数字。 思路 看 与 的大小关系 如果 ,则全为0 否则,先输出最后面 个元素,再输出 个0
阅读全文
摘要:洛谷-3758 思路 一定要看数据范围! Code #include <bits/stdc++.h> using namespace std; #define _u_u_ ios::sync_with_stdio(false), cin.tie(nullptr) #define cf int _o_
阅读全文
摘要:洛谷-1714 思路 求连续子段,显然需要前缀和处理一下,问题就变成了求出 使得 于是利用双端队列从每个区间的max-min中找答案。 但实际上,对于每个区间,我们只需要找到最小值就够了,当滑动窗口到了 时,
阅读全文
摘要:HDU-4549 思路 列出数列前几项,发现 和 的次数符合斐波那契数列。 问题就转化为了求出 项斐波那契数列,可以使用矩阵快速幂加速。但是求出的第 个斐波那契数非常大,使用快速幂会超时。 问题就转化为了如何减少快速幂的次数。 于是想到了 欧拉降幂 或 费马小定理。 费马小定
阅读全文
摘要:HDU-4565 思路 这里 太难想了www Code #include <bits/stdc++.h> using namespace std; #define _u_u_ ios::sync_with_stdio(false), cin.tie(nullptr) #define cf int _
阅读全文
摘要:洛谷-5175 思路 这里面的第一篇题解 根据需要啥就加啥的想法!(妙啊) 我的矩阵转换 $$ \
阅读全文
摘要:洛谷-1939 猜测 原来我是打算按照斐波那契数列的方法,找到一个二维矩阵,因为 ,只有两个元素。 但是错了,得不到正确答案。 再看题解,全都是三维矩阵,我就感觉,是不是初始条件的个数决定矩阵是几维的呢? 比如:$f_n = f_{n-1} + f_{
阅读全文
摘要:洛谷-1052 思路 文字版 视频版 Code #include <bits/stdc++.h> using namespace std; #define _u_u_ ios::sync_with_stdio(false), cin.tie(nullptr) #define cf int _o_o_
阅读全文
摘要:洛谷-3131 思路 首先有一个 ,从大到小枚举区间长度,然后通过前缀和找是否存在这样的区间,时间复杂度 。 在上述操作中,实际上我们做的就是找到两个下标 ,判断 在模7下是否为 。即 $$ (S[b] - S
阅读全文
摘要:洛谷-4552 思路 首先需要 由区间加减法或者最后的形式(变为1个数) 联想到 差分 在差分的形式下,只剩一个数意味着差分数组中 都必须为0,其他任意。 而给我们的操作 在差分形式下 意味着 选择两个下标 一个加一,一个减一。 因此,我们很容易想到将 的正数
阅读全文
摘要:洛谷-1198 思路 这个! 辅助解释 Code #include <bits/stdc++.h> using namespace std; #define _u_u_ ios::sync_with_stdio(false), cin.tie(nullptr) #define cf int _o_o
阅读全文
摘要:洛谷-3295 思路 这里 辅助解释 Code #include <bits/stdc++.h> using namespace std; #define _u_u_ ios::sync_with_stdio(false), cin.tie(nullptr) #define cf int _o_o_
阅读全文
摘要:POJ-1018 (现在好像过不了) 题意 目前有一个公司需要购进宽带设备,每种设备有多款机器供选择,每种设备都需购进一台,现给出每台设备的带宽p与价格q,要求选择设备的最小带宽 (其中 表示所有购进设备中最小的带宽, 表示所有购进设备的价格之
阅读全文
摘要:POJ-3737 题意 给出一个圆锥的表面积,求最大体积。 思路 显然,得到底面积的半径后,一切都能得到。在我们慢慢延长半径时,发现不满足线性,而是单峰函数。故三分。 圆锥复习 Code: #include<cstdio> #include<cstring> #include<algorithm>
阅读全文
摘要:POJ-3301 题意: 给出二维平面上不超过30个点,求能覆盖这些点的最小的正方形的面积。 思路 首先是,如何判断一个正方形能否覆盖这片区域呢? 一种方法就是,选择两个正交的方向 ,求出这些点在这两个方向上的最长长度 ,则边长为$max(len_x,len_y)
阅读全文
摘要:矩阵转置 三元组形式 struct Node { int r, c, val; // 行、列、值 }; 存矩阵三元组的三元组是有序的,按r值递增,再按c值递增。 如何更好地保证转置后的矩阵依然有序? 一个显然的做法是先全部转置,再排序,复杂度大概 。 还有一个 的做法:
阅读全文