随笔分类 - 算法
摘要:Rinne Loves Edges Rinne 最近了解了如何快速维护可支持插入边删除边的图,并且高效的回答一下奇妙的询问。 她现在拿到了一个 n 个节点 m 条边的无向连通图,每条边有一个边权 \(w_i\) 现在她想玩一个游戏:选取一个 “重要点” S,然后选择性删除一些边,使得原图中所有除 S
阅读全文
摘要:滑动窗口 给一个长度为N的数组,一个长为K的滑动窗体从最左端移至最右端,你只能看到窗口中的K个数,每次窗体向右移动一位你的任务是找出窗体在各个位置时的最大值和最小值。 链接:https://ac.nowcoder.com/acm/problem/50528 来源:牛客网 单调队列,以单调递增为例:使
阅读全文
摘要:数学考试 今天qwb要参加一个数学考试,这套试卷一共有n道题,每道题qwb能获得的分数为ai,qwb并不打算把这些题全做完, 他想选总共2k道题来做,并且期望他能获得的分数尽可能的大,他准备选2个不连续的长度为k的区间, 即[L,L+1,L+2,....,L+k-1],[R,R+1,R+2,...,
阅读全文
摘要:最长回文子序列 #include <bits/stdc++.h> using namespace std; const int N = 1010, INF = 0x3f3f3f3f; int dp[N][N], n; string str; void longest_palindromic_subs
阅读全文
摘要:在一个游戏中,tokitsukaze需要在n个士兵中选出一些士兵组成一个团去打副本。 第i个士兵的战力为v[i],团的战力是团内所有士兵的战力之和。 但是这些士兵有特殊的要求:如果选了第i个士兵,这个士兵希望团的人数不超过s[i]。(如果不选第i个士兵,就没有这个限制。) tokitsukaze想知
阅读全文
摘要:给定一个正整数n,求$\sum_^{\left[ \frac \right]}$,式子中[x]为下取整。答案可能会很大,输出答案对998244353取模后的值。 链接:https://ac.nowcoder.com/acm/contest/6221/B 来源:牛客网 这个题直接暴力是做不来的。 我们
阅读全文
摘要:数的三次方根 给定一个浮点数n,求它的三次方根。 简单的二分,每次二分判断中点的三次方和n的关系,如果大于则在左区间,反之在右区间,由于是浮点类型,所以等号比较随意。 #include <bits/stdc++.h> using namespace std; inline double q(doub
阅读全文
摘要:带权的DAG节点排序 DAG即Directed Acyclic Graph,有向无环图.用DAG可以描述一些有依赖关系的任务组,而这些任务还有另外一个属性,即都有一个权重,标示这个任务的重要性. 我们需要你来实现一个算法,对DAG里面的节点进行排序,保证排序不违背DAG的依赖关系,即一个任务A如果排
阅读全文
摘要:数字组合 给定N个正整数$A_1,A_2,…,A_n$,从中选出若干个数,使它们的和为m,求有多少种选择方案。 这个问题是背包问题的一个变型: 设dp[i][j]为前i个数和为j的方案数,显然dp[0][0] = 1;即前0个数和为0的方案数为1。 状态转移方程: \[ dp[i][j]\\ =\\
阅读全文
摘要:#最长连续不重复子序列 给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续子序列,输出它的长度。 我们使用一个hash表和双指针动态维护双指针所夹区间内的信息。 i在前j在后。 每次i向前都使得hash[a[i]]++以此来增加序列中的元素。 接下来可能会出现冲突即[j, i]存在相同数字
阅读全文
摘要:树状数组 本博客仅贴出树状数组模板 #include <bits/stdc++.h> #define lowbit(x) (x & -x) using namespace std; const int N = 10010; int a[N], n; //a[x] += c void insert(i
阅读全文
摘要:归并排序 给定长度为n的序列,归并排序并输出序列 我们把归并排序这样的大问题拆成两个小问题: 即将大数组分割成两个小数组,对这两个小数组分别进行归并排序并合并这两个小数组来得到一个排好序的大数组。 简单来说就两步:拆分,合并。 拆分是将原数组拆分成几个小段 合并是将这几个小段再合起来 #includ
阅读全文
摘要:差分 给定长度为n的序列,有m个更新,每次更新要求使[l, r]范围内的数增加c,给出最后的序列。 朴素思想当然是直接一个循环使得[l, r]范围内的数直接都加c,但是这样做的话复杂度是O(nm)。 如果我们能用O(1)的操作来完成每一次的更新就好了。 所以引入差分序列:设有序列sub[],sub[
阅读全文
摘要:前缀和 输入长度为n的序列,给出m个询问,每个询问给出l,r,求sum([l, r]) 显然我们不能对于每个询问都从l加到r,这样的复杂度是O(nm)。 所以引出了前缀和,设原数组为a[],我们新建一个数组为sum[],对于sum数组,我们令sum[1] = a[1], sum[2] = a[1]
阅读全文
摘要:64位整数乘法 求a乘b对p取模的值。 众所周知,64位整数乘以64位整数最大是可以达到128位的,所以使用long long就肯定会爆炸,所以我们可以使用128位整数。 #include <bits/stdc++.h> using namespace std; int main() { long
阅读全文

浙公网安备 33010602011771号