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 阅读全文
posted @ 2022-11-24 14:22 Uzhia 阅读(37) 评论(0) 推荐(0) 编辑
摘要:洛谷-1020 思路 由这篇blog可以知道本题求的就是 最长上升子序列 和 最长下降子序列 的长度。 采用的是O(nlogn)的做法。 有一个问题,在求最长上升子序列的过程中,用到了lower_bound函数,求第一个大于等于t的数; 这里不能使用upper_bound函数,因为它求的是第一个 阅读全文
posted @ 2022-11-22 21:42 Uzhia 阅读(30) 评论(0) 推荐(0) 编辑
摘要:洛谷-2347 思路 类似多重背包,考虑转化为01背包,dp[i]表示i是否能被表示。 对于第i个背包,前i1个背包能表示的已经表示完成,那么dp[j]能被表示当且仅当dp[jw[i]]能被表示。即 dp[j]|=dp[jw[i]] 可以使用二进 阅读全文
posted @ 2022-11-21 23:24 Uzhia 阅读(28) 评论(0) 推荐(0) 编辑
摘要:HDU-1257 思路 最少需要的防御系统个数就是最大上升子序列的长度。(Dilworth定理) 这篇blog介绍了Dilworth定理。 Code O(n2)的LIS #include <bits/stdc++.h> using namespace std; #define _u_u_ io 阅读全文
posted @ 2022-11-21 22:41 Uzhia 阅读(15) 评论(0) 推荐(0) 编辑
摘要:HDU-1712 思路 dp[i][j]表示从前i个科目中选,总共花j天所能得到的最大学分。 首先遍历科目i:1n,再遍历所有天数j:1m,再遍历当前科目i能花的时间k:0j,有转移 阅读全文
posted @ 2022-11-21 20:12 Uzhia 阅读(30) 评论(0) 推荐(0) 编辑
摘要:# 数据结构课程-关键路径 ## 拓扑排序 判环 + bfs(栈实现) ```cpp #include using namespace std; inline void _A_A_(); signed main() {_A_A_();return 0;} const int maxn = 1e3 + 阅读全文
posted @ 2022-11-21 12:49 Uzhia 阅读(24) 评论(0) 推荐(0) 编辑
摘要:洛谷-1347 思路 此题解的思路再加上这篇blog的代码实现。 注意:本题要求的不是一个拓扑排序就可以了,实际上是要求一条链的拓扑排序。 Code #include <bits/stdc++.h> using namespace std; #define _u_u_ ios::sync_with_ 阅读全文
posted @ 2022-11-20 16:04 Uzhia 阅读(33) 评论(0) 推荐(0) 编辑
摘要:A - Shift 题意 给一个长度为n的数组,有k次操作,每次操作会将数组最前面的元素删掉,再在数组最后面加上一个0元素,问k次操作后的数组中的数字。 思路 看nk的大小关系 如果kn,则全为0 否则,先输出最后面nk+1个元素,再输出k个0 阅读全文
posted @ 2022-11-19 22:20 Uzhia 阅读(69) 评论(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_ 阅读全文
posted @ 2022-11-18 16:43 Uzhia 阅读(26) 评论(0) 推荐(0) 编辑
摘要:HDU-5015 思路 n10是一个较为明显的提示,容易想到一列一列的转移,通过对an,m的寻找,发现an,m=1nai,m1+a0,m,其中1nai,m1全都是前一列的元素,a0,m 阅读全文
posted @ 2022-11-18 09:39 Uzhia 阅读(17) 评论(0) 推荐(0) 编辑
摘要:洛谷-1714 思路 求连续子段,显然需要前缀和处理一下,问题就变成了求出i,j使得 maxs[i]s[j],ij>m 于是利用双端队列从每个区间的max-min中找答案。 但实际上,对于每个区间,我们只需要找到最小值就够了,当滑动窗口到了[j,i]时, 阅读全文
posted @ 2022-11-16 21:07 Uzhia 阅读(27) 评论(0) 推荐(0) 编辑
摘要:HDU-4549 思路 列出数列前几项,发现ab的次数符合斐波那契数列。 问题就转化为了求出1e9项斐波那契数列,可以使用矩阵快速幂加速。但是求出的第1e9个斐波那契数非常大,使用快速幂会超时。 问题就转化为了如何减少快速幂的次数。 于是想到了 欧拉降幂 或 费马小定理。 费马小定 阅读全文
posted @ 2022-11-15 23:03 Uzhia 阅读(20) 评论(0) 推荐(0) 编辑
摘要: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 _ 阅读全文
posted @ 2022-11-15 12:13 Uzhia 阅读(18) 评论(0) 推荐(0) 编辑
摘要:洛谷-5175 思路 这里面的第一篇题解 根据需要啥就加啥的想法!(妙啊) 我的矩阵转换 $$ (Six2ai2+y2ai12+2xyaiai1ai2xai2+yaiai1) \ 阅读全文
posted @ 2022-11-15 10:04 Uzhia 阅读(25) 评论(0) 推荐(0) 编辑
摘要:洛谷-2044 思路 首先对与递推式xn=(axn1+c) % mod,发现c的存在使得不能直接使用整数快速幂求出xn,因为xn是关于a,c,x0n次多项式。并且n1e18大小的。 于是考虑使用矩阵快速幂加速,但是显然不能使 阅读全文
posted @ 2022-11-14 14:26 Uzhia 阅读(47) 评论(0) 推荐(0) 编辑
摘要:洛谷-1306 思路 引理1:(fn是斐波那契数列) gcd(fn,fn+1)=1 引理2:(设m>ngcd(fn,fm)=gcd(fn,fmnfn+1) 结论: $$ \gcd(f_n,f 阅读全文
posted @ 2022-11-13 23:16 Uzhia 阅读(16) 评论(0) 推荐(0) 编辑
摘要:洛谷-1939 猜测 原来我是打算按照斐波那契数列的方法,找到一个二维矩阵,因为ax=ax1+ax3,只有两个元素。 但是错了,得不到正确答案。 再看题解,全都是三维矩阵,我就感觉,是不是初始条件的个数决定矩阵是几维的呢? 比如:$f_n = f_{n-1} + f_{ 阅读全文
posted @ 2022-11-13 22:23 Uzhia 阅读(19) 评论(0) 推荐(0) 编辑
摘要:洛谷-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_ 阅读全文
posted @ 2022-11-12 22:04 Uzhia 阅读(31) 评论(0) 推荐(0) 编辑
摘要:洛谷-3131 思路 首先有一个bruteforce,从大到小枚举区间长度,然后通过前缀和找是否存在这样的区间,时间复杂度o(n2)。 在上述操作中,实际上我们做的就是找到两个下标a,b,判断(s[b]s[a1]) 在模7下是否为0。即 $$ (S[b] - S 阅读全文
posted @ 2022-11-11 20:17 Uzhia 阅读(31) 评论(0) 推荐(0) 编辑
摘要:洛谷-4552 思路 首先需要 由区间加减法或者最后的形式(变为1个数) 联想到 差分 在差分的形式下,只剩一个数意味着差分数组中2n都必须为0,其他任意。 而给我们的操作 在差分形式下 意味着 选择两个下标 一个加一,一个减一。 因此,我们很容易想到将2n的正数 阅读全文
posted @ 2022-11-11 20:03 Uzhia 阅读(25) 评论(0) 推荐(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 阅读全文
posted @ 2022-11-08 21:31 Uzhia 阅读(12) 评论(0) 推荐(0) 编辑
摘要:洛谷-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_ 阅读全文
posted @ 2022-11-08 18:37 Uzhia 阅读(19) 评论(0) 推荐(0) 编辑
摘要:POJ-1018 (现在好像过不了) 题意 目前有一个公司需要购进宽带设备,每种设备有多款机器供选择,每种设备都需购进一台,现给出每台设备的带宽p与价格q,要求选择设备的最小带宽min(p)/add(q)(其中min(p)表示所有购进设备中最小的带宽,add(q)表示所有购进设备的价格之 阅读全文
posted @ 2022-11-07 21:22 Uzhia 阅读(14) 评论(0) 推荐(0) 编辑
摘要:POJ-3737 题意 给出一个圆锥的表面积,求最大体积。 思路 显然,得到底面积的半径后,一切都能得到。在我们慢慢延长半径时,发现不满足线性,而是单峰函数。故三分。 圆锥复习 Code: #include<cstdio> #include<cstring> #include<algorithm> 阅读全文
posted @ 2022-11-07 20:09 Uzhia 阅读(22) 评论(0) 推荐(0) 编辑
摘要:POJ-3301 题意: 给出二维平面上不超过30个点,求能覆盖这些点的最小的正方形的面积。 思路 首先是,如何判断一个正方形能否覆盖这片区域呢? 一种方法就是,选择两个正交的方向x,y,求出这些点在这两个方向上的最长长度lenx,leny,则边长为$max(len_x,len_y) 阅读全文
posted @ 2022-11-07 19:13 Uzhia 阅读(17) 评论(0) 推荐(0) 编辑
摘要:矩阵转置 三元组形式 struct Node { int r, c, val; // 行、列、值 }; 存矩阵三元组的三元组是有序的,按r值递增,再按c值递增。 如何更好地保证转置后的矩阵依然有序? 一个显然的做法是先全部转置,再排序,复杂度大概O(nlogn)。 还有一个O(n)的做法: 阅读全文
posted @ 2022-11-03 12:49 Uzhia 阅读(37) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示