![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 58
算法
linjiayina
hello world!
展开
-
数据结构算法题——链表
给你两个的链表,表示两个非负的整数。它们每位数字都是按照的方式存储的,并且每个节点只能存储数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。原创 2023-07-09 09:24:44 · 308 阅读 · 0 评论 -
数据结构算法题——杂
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−2, 2− 1] ,就返回 0。原创 2023-07-09 09:24:13 · 306 阅读 · 0 评论 -
数据结构算法题——数组
leetcode-34.在排序数组中查找元素的第一个和最后一个位置(二分查找)给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。ans = mid;} else {} else {时间复杂度:O(logn),其中 n 为数组的长度。原创 2023-07-09 09:23:45 · 671 阅读 · 0 评论 -
数据结构算法题——图
给你一个的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有,并以列表形式返回。你可以按返回这些组合。candidates 中的数字可以。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为 target 的不同组合数少于 150 个。:O(S),其中 S 为所有可行解的长度之和。从分析给出的搜索树我们可以看出时间复杂度取决于搜索树所有叶子节点的深度之和,即所有可行解的长度之和。原创 2023-07-09 09:21:29 · 102 阅读 · 0 评论 -
数据结构算法题——树
给定一个二叉树的根节点 root ,返回 它的遍历。:O(n),其中 n 为二叉树节点的个数。二叉树的遍历中每个节点会被访问一次且只会被访问一次。:O(n)。空间复杂度取决于递归的栈深度,而栈深度在二叉树为一条链的情况下会达到 O(n) 的级别。原创 2023-07-09 09:22:20 · 398 阅读 · 0 评论 -
Senior Pan(最短路+二进制分组)
题目链接Problem DescriptionSenior Pan fails in his discrete math exam again. So he asks Master ZKC to give him graph theory problems everyday.The task is simple : ZKC will give Pan a directed graph every time, and selects some nodes from that graph, you can原创 2021-02-07 15:32:08 · 347 阅读 · 0 评论 -
【次短路模板】Roadblocks
题目链接DescriptionBessie has moved to a small farm and sometimes enjoys returning to visit one of her best friends. She does not want to get to her old home too quickly, because she likes the scenery along the way. She has decided to take the second-shortes原创 2021-02-06 17:31:54 · 253 阅读 · 0 评论 -
【模板】裴蜀定理
题目链接#include<bits/stdc++.h>using namespace std;int gcd(int x, int y){ if(y == 0) return x; else return gcd(y, x % y);}int main(){ int n, x; cin >> n; int ans = 0; for(int i = 1; i <= n; i++){ cin >> x; ans = gcd原创 2021-02-02 17:39:52 · 114 阅读 · 0 评论 -
【模板】乘法逆元
题目链接题目描述给定 n, p 求 1 ∼ n 中所有整数在模 p 意义下的乘法逆元。输入格式一行两个正整数 n, p。输出格式输出 n 行,第 i 行表示 i 在模 p 下的乘法逆元。输入输出样例输入10 13输出179108112534方法一:递推法#include<bits/stdc++.h>using namespace std;const int maxn = 3e6 +5;typedef long long ll;ll inv[ma原创 2021-02-02 15:30:43 · 518 阅读 · 0 评论 -
【模板】二元一次不定方程 (exgcd)
题目链接题目描述给定不定方程ax + by = c若该方程无整数解,输出 −1。若该方程有整数解,且有正整数解,则输出其正整数解的数量,所有正整数解中 x 的最小值,所有正整数解中 y 的最小值,所有正整数解中 x 的最大值,以及所有正整数解中 y 的最大值。若方程有整数解,但没有正整数解,你需要输出所有整数解中 x 的最小正整数值, y 的最小正整数值。正整数解即为 x, y 均为正整数的解,0 不是正整数。整数解即为 x, y 均为整数的解。x 的最小正整数值即所有 x 为正整数的整数原创 2021-02-02 14:14:38 · 398 阅读 · 1 评论 -
【模板】割点(割顶)
题目链接题目描述给出一个 n 个点,m 条边的无向图,求图的割点。输入格式第一行输入两个正整数 n,m。下面 m 行每行输入两个正整数 x,y 表示 x 到 y 有一条边。输出格式第一行输出割点个数。第二行按照节点编号从小到大输出节点,用空格隔开。输入输出样例输入6 71 21 31 42 53 54 55 6输出15#include<bits/stdc++.h>using namespace std;const int maxn = 2e5 +原创 2021-02-01 15:37:09 · 129 阅读 · 0 评论 -
【模板】扫描线(离散化)
题目链接题目描述求 n 个矩形的面积并。输入格式第一行一个正整数 n。接下来 n 行每行四个非负整数 x1,y1,x2,y2,表示一个矩形的左下角坐标为 (x1, y1),右上角坐标为 (x2, y2)。输出格式一行一个正整数,表示 n 个矩形的并集覆盖的总面积。输入输出样例输入2100 100 200 200150 150 250 255输出18000#include<cstdio>#include<cstring>#include<cstd原创 2021-02-01 12:01:56 · 191 阅读 · 0 评论 -
【模板】线性基
题目链接题目描述给定 n 个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。输入格式第一行一个数 n,表示元素个数接下来一行 n 个数输出格式仅一行,表示答案。输入输出样例输入21 1输出1#include<bits/stdc++.h>using namespace std;typedef long long ll;ll d[65], x;int n;void add(ll x) // 插入线性基 { for(int i = 60;原创 2021-01-30 13:06:15 · 161 阅读 · 1 评论 -
【模板】负环
题目链接题目描述给定一个 n 个点的有向图,请求出图中是否存在从顶点 1 出发能到达的负环。负环的定义是:一条边权之和为负数的回路。输入格式本题单测试点有多组测试数据。输入的第一行是一个整数 T,表示测试数据的组数。对于每组数据的格式如下:第一行有两个整数,分别表示图的点数 n 和接下来给出边信息的条数 m。接下来 m 行,每行三个整数 u, v, w。若 w ≥ 0,则表示存在一条从 u 至 v 边权为 w 的边,还存在一条从 v 至 u 边权为 w 的边。若 w < 0,则只原创 2021-01-29 16:59:40 · 304 阅读 · 0 评论 -
【模板】缩点(tarjan + 拓扑排序)
题目链接题目描述给定一个 n 个点 m 条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大。你只需要求出这个权值和。允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次。输入格式第一行两个正整数 n, m第二行 n 个整数,依次代表点权第三至 m + 2 行,每行两个整数 u, v,表示一条 u → v 的有向边。输出格式共一行,最大的点权之和。输入输出样例输入2 21 11 22 1输出2#include<bits/stdc++.h&原创 2021-01-29 15:27:22 · 296 阅读 · 0 评论 -
【模板】差分约束算法
题目链接#include<bits/stdc++.h>using namespace std;const int maxn = 5e3 + 5;const int inf = 0x3f3f3f3f;int dis[maxn], total[maxn], n, m;bool vis[maxn];struct edge{ int to, w, next;}e[maxn * 2];int h[maxn], tot;void add(int u, int v, int w)原创 2021-01-28 11:16:13 · 133 阅读 · 0 评论 -
【模板】三分法
题目链接题目描述如题,给出一个 N 次函数,保证在范围 [l, r] 内存在一点 x,使得 [l, x] 上单调增,[x, r] 上单调减。试求出 x 的值。输入格式第一行一次包含一个正整数 N 和两个实数 l, r,含义如题目描述所示。第二行包含 N + 1 个实数,从高到低依次表示该 N 次函数各项的系数。输出格式输出为一行,包含一个实数,即为 x 的值。若你的答案与标准答案的相对或绝对误差不超过 10-5 则算正确。输入输出样例输入3 -0.9981 0.51 -3 -3 1输原创 2021-01-27 19:23:43 · 119 阅读 · 0 评论 -
【模板】KMP字符串匹配
题目链接题目描述给出两个字符串 s1 和 s2,若 s1 的区间 [l,r] 子串与 s2 完全相同,则称 s2 在 s1 中出现了,其出现位置为 l。现在请你求出 s2 在 s1 中所有出现的位置。定义一个字符串 s 的 border 为 s 的一个非 s 本身的子串 t,满足 t 既是 s 的前缀,又是 s 的后缀。对于 s2,你还需要求出对于其每个前缀 s’ 的最长 border t’ 的长度。输入格式第一行为一个字符串,即为 s1。第二行为一个字符串,即为 s2。输出格式首先输出若原创 2021-01-27 18:37:25 · 235 阅读 · 0 评论 -
【模板】ST表
题目链接题目描述给定一个长度为 N 的数列,和 M 次询问,求出每一次询问的区间内数字的最大值。输入格式第一行包含两个整数 N, M,分别表示数列的长度和询问的个数。第二行包含 N 个整数(记为 ai),依次表示数列的第 i 项。接下来 M 行,每行包含两个整数 li,ri,表示查询的区间为 [li,ri]。输出格式输出包含 M 行,每行一个整数,依次表示每一次询问的结果。输入输出样例输入8 89 3 1 7 5 6 0 81 61 52 72 61 84 83 71原创 2021-01-25 20:18:45 · 122 阅读 · 0 评论 -
【模板】最近公共祖先(LCA)
题目链接题目描述如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。输入格式第一行包含三个正整数 N, M, S,分别表示树的结点个数、询问的个数和树根结点的序号。接下来 N − 1 行每行包含两个正整数 x, y,表示 x 结点和 y 结点之间有一条直接连接的边(数据保证可以构成树)。接下来 M 行每行包含两个正整数 a, b,表示询问 a 结点和 b 结点的最近公共祖先。输出格式输出包含 M 行,每行包含一个正整数,依次为每一个询问的结果。输入输出样例输入5 5 43原创 2021-01-24 20:00:53 · 168 阅读 · 0 评论 -
【模板】单源最短路径(标准版)
题目链接题目描述给定一个 n 个点,m 条有向边的带非负权图,请你计算从 s 出发,到每个点的距离。数据保证你能从 s 出发到任意点。输入格式第一行为三个正整数 n,m,s。第二行起 m 行,每行三个非负整数 ui,vi,wi,表示从 ui 到 vi 有一条权值为 wi 的有向边。输出格式输出一行 n 个空格分隔的非负整数,表示 s 到每个点的距离。输入输出样例输入4 6 11 2 22 3 22 4 11 3 53 4 31 4 4输出0 2 4 3#include&原创 2021-01-24 16:42:05 · 236 阅读 · 0 评论 -
【模板】最小生成树
题目链接题目描述如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出 orz。输入格式第一行包含两个整数 N,M,表示该图共有 N 个结点和 M 条无向边。接下来 M 行每行包含三个整数 Xi,Yi,Zi,表示有一条长度为 Zi 的无向边连接结点 Xi,Yi。输出格式如果该图连通,则输出一个整数表示最小生成树的各边的长度之和。如果该图不连通则输出 orz。输入输出样例输入4 51 2 21 3 21 4 32 3 43 4 3输出7#include<bits原创 2021-01-24 16:05:43 · 187 阅读 · 0 评论 -
【模板】树状数组 2
题目链接题目描述如题,已知一个数列,你需要进行下面两种操作:将某区间每一个数数加上 x;求出某一个数的值。输入格式第一行包含两个整数 N、M,分别表示该数列数字的个数和操作的总个数。第二行包含 N 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。接下来 M 行每行包含 2 或 4个整数,表示一个操作,具体如下:操作 1: 格式:1 x y k 含义:将区间 [x,y] 内每个数加上 k;操作 2: 格式:2 x 含义:输出第 x 个数的值。输出格式输出包含若干行原创 2021-01-24 15:21:43 · 95 阅读 · 0 评论 -
【模板】树状数组 1
题目链接题目描述如题,已知一个数列,你需要进行下面两种操作:将某一个数加上 x求出某区间每一个数的和输入格式第一行包含两个正整数 n,m,分别表示该数列数字的个数和操作的总个数。第二行包含 n 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。接下来 m 行每行包含 3 个整数,表示一个操作,具体如下:1 x k 含义:将第 x 个数加上 k2 x y 含义:输出区间 [x,y] 内每个数的和输出格式输出包含若干行整数,即为所有操作 2 的结果原创 2021-01-23 16:10:10 · 88 阅读 · 0 评论 -
【模板】线段树 2
题目链接题目描述如题,已知一个数列,你需要进行下面三种操作:将某区间每一个数乘上 x将某区间每一个数加上 x求出某区间每一个数的和输入格式第一行包含三个整数 n,m,p,分别表示该数列数字的个数、操作的总个数和模数。第二行包含 n 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。接下来 m 行每行包含若干个整数,表示一个操作,具体如下:操作 1: 格式:1 x y k 含义:将区间 [x,y] 内每个数乘上 k操作 2: 格式:2 x y k 含义:将区间 [x,原创 2021-01-23 10:18:31 · 80 阅读 · 0 评论 -
【模板】线段树 1
题目链接题目描述如题,已知一个数列,你需要进行下面两种操作:将某区间每一个数加上k。求出某区间每一个数的和。输入格式第一行包含两个整数 n, m,分别表示该数列数字的个数和操作的总个数。第二行包含 n 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。接下来 m 行每行包含 3 或 4 个整数,表示一个操作,具体如下:1 x y k:将区间 [x,y] 内每个数加上 k。2 x y:输出区间 [x,y] 内每个数的和。输出格式输出包含若干行整数,即为所有操作原创 2021-01-23 09:10:39 · 103 阅读 · 0 评论 -
莫队——[国家集训队]小Z的袜子
题目链接题目描述作为一个生活散漫的人,小 Z 每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小 Z 再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小 Z 把这 N 只袜子从 1 到 N 编号,然后从编号 L 到 R (L 尽管小 Z 并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬。你的任务便是告诉小 Z,他有多大的概率抽到两只颜色相同的袜子。当然,小 Z 希望这个概率尽量高,所以他可能会询原创 2021-01-20 11:47:08 · 115 阅读 · 0 评论 -
莫队——DQUERY - D-query
题目链接题目大意:给出一个长度为 n 的数列,a1,a2,…,an,有 q 个询问,每个询问给出数对 (i,j),需要你给出 ai,ai+1,…,aj这一段中有多少不同的数字。输入输出样例输入51 1 2 1 331 52 43 5输出323这题我是用莫队过的,莫队算法在询问排序后,通过移动左右端点来更改答案,从而保证它优秀的复杂度,具体可以看这篇博客(大佬太强了)。#include<bits/stdc++.h>using namespace std;#def原创 2021-01-19 15:14:09 · 137 阅读 · 2 评论 -
堆——Operating System
题目链接题目描述在学习Operating System的过程中,Glory遇到了这样一个问题,现在有一个大小为可以容纳N个页面的内存,硬盘内的内容被分成M个页面,用1~M来标识,一开始内存里没有任何页面,接下来用户会请求Q个页面,你需要设计一个置换算法,使得缺页发生的次数最少。缺页是指用户请求某个编号的页面,但这个页面没有在内存中的情况。发生缺页之后,你必须要把硬盘内对应的页面调入内存中,如果内存已满,你需要置换掉当前内存中的某个页面。输入描述多组数据,请处理到输入结束。每组数据,第一行为三个整数原创 2021-01-17 18:33:55 · 196 阅读 · 0 评论 -
A*算法——第k短路
题目链接题目描述“Good man never makes girls wait or breaks an appointment!” said the mandarin duck father. Softly touching his little ducks’ head, he told them a story.“Prince Remmarguts lives in his kingdom UDF – United Delta of Freedom. One day their neighbor原创 2020-11-02 14:27:21 · 167 阅读 · 0 评论 -
思维题——Quasi Binary
题目链接题目描述给出一个数 n,你需要将 n 写成若干个数的和,其中每个数的十进制表示中仅包含 0 和 1。问最少需要多少个数。输入输出格式输入格式:一行 一个数 n(1 ≤ n ≤ 106)输出格式:最少的数的个数,并给出一种方案。输入输出样例输入样例 19输出样例 191 1 1 1 1 1 1 1 1输入样例 232输出样例 2310 11 11分析可以先找出每位上的数,最大的数就是最少的数的个数。因为我是从个位开始找的,所以可以从后往前进行枚举,若这一位上的原创 2020-10-12 16:51:13 · 468 阅读 · 1 评论 -
动态规划——Zuma(区间dp)
题目链接题目大意Genos 最近在他的手机上下载了祖玛游戏。在祖玛游戏里,存在 n 个一行的宝石,第i个宝石的颜色是 Ci 。这个游戏的目标是尽快的消灭一行中所有的宝石。 在一秒钟,Genos 能很快的挑选出这些有颜色的宝石中的一个回文的,连续的子串,并将这个子串移除。每当一个子串被删除后,剩余的宝石将连接在一起,形成一个新的行列。你的任务是:求出把整个宝石串都移除的最短时间。 让我们给你一个提示:如果一个串正着读或倒着读都一样,那么这个串(或子串)叫回文串。在我们这道题中,“回文”指这个宝石串中的第一原创 2020-10-10 19:38:40 · 449 阅读 · 1 评论 -
动态规划——248 G(区间dp)
题目链接题目描述Bessie likes downloading games to play on her cell phone, even though she doesfind the small touch screen rather cumbersome to use with her large hooves.She is particularly intrigued by the current game she is playing.The game starts with a sequ原创 2020-10-09 20:31:26 · 245 阅读 · 0 评论 -
动态规划——石子合并(区间与环形动态规划)
题目链接题目描述在一个圆形操场的四周摆放 N 堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的 2 堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。试设计出一个算法,计算出将 N 堆石子合并成 1 堆的最小得分和最大得分。输入格式数据的第 1 行是正整数 N,表示有 N 堆石子。第 2 行有 N 个整数,第 i 个整数 ai 表示第 i 堆石子的个数。输出格式输出共 2 行,第 1 行为最小得分,第 2 行为最大得分。输入输出样例输入44 5 9 4输出43原创 2020-10-09 18:26:11 · 270 阅读 · 0 评论 -
动态规划——木棍加工
题目链接题目描述一堆木头棍子共有n根,每根棍子的长度和宽度都是已知的。棍子可以被一台机器一个接一个地加工。机器处理一根棍子之前需要准备时间。准备时间是这样定义的:第一根棍子的准备时间为1分钟;如果刚处理完长度为L,宽度为W的棍子,那么如果下一个棍子长度为Li,宽度为Wi,并且满足L>=Li,W>=Wi,这个棍子就不需要准备时间,否则需要1分钟的准备时间;计算处理完n根棍子所需要的最短准备时间。比如,你有5根棍子,长度和宽度分别为(4, 9),(5, 2),(2, 1),(3, 5),(原创 2020-10-07 12:42:53 · 717 阅读 · 1 评论 -
动态规划——编辑距离
题目链接题目描述设 A 和 B 是两个字符串。我们要用最少的字符操作次数,将字符串 A 转换为字符串 B。这里所说的字符操作共有三种:1、删除一个字符;2、插入一个字符;3、将一个字符改为另一个字符;!皆为小写字母!输入格式第一行为字符串 A;第二行为字符串 B;字符串 A 和 B 的长度均小于 2000。输出格式只有一个正整数,为最少字符操作次数。输入输出样例输入sfdqxbwgfdgw输出4#include<bits/stdc++.h>using name原创 2020-10-06 21:13:59 · 196 阅读 · 0 评论 -
动态规划——导弹拦截(最长不上升子序列、最长上升子序列)
题目链接题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入导弹依次飞来的高度(雷达给出的高度数据是 ≤ 50000 的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。输入格式1 行,若干个整数(个数 ≤ 100000)输出格原创 2020-10-06 20:13:33 · 271 阅读 · 0 评论 -
动态规划——5倍经验日
题目链接动态规划——5倍经验日题目描述现在 absi2011 拿出了 x 个迷你装药物(嗑药打人可耻….),准备开始与那些人打了由于迷你装一个只能管一次,所以 absi2011 要谨慎的使用这些药,悲剧的是,没到达最少打败该人所用的属性药了他打人必输>.<所以他用 2 个药去打别人,别人却表明 3 个药才能打过,那么相当于你输了并且这两个属性药浪费了。现在有 n 个好友,有输掉拿的经验、赢了拿的经验、要嗑几个药才能打过。求出最大经验(注意,最后要乘以 5)输入格式第一行两个数,n原创 2020-10-06 16:14:27 · 161 阅读 · 0 评论 -
思维题——方块 I
题目链接思维题——方块 I题目描述有 N 个方块排成一排,每个方块都染有颜色,第 i 个的颜色为 Ci,一共有三种颜色,分别为红,黄,蓝,现在你可以对相邻的颜色不同的方块进行施法,使其变成第三种颜色,比如对相邻的红方块和黄方块进行施法,就会使其合并为蓝方块。施法顺序的不同,可能对最终的结果产生不同的影响,问在最优策略下,最少能剩下多少个方块。输入描述T 组数据。每组数据一行,将方块序列用字符串形式给出,a,b,c 表示三种不同颜色的方块。T <= 101 <= N <= 5原创 2020-10-04 10:26:05 · 680 阅读 · 0 评论 -
组合数学——Eddy‘s AC难题
题目链接组合数学——Eddy’s AC难题Eddy是个ACMer,他不仅喜欢做ACM题,而且对于Ranklist中每个人的ac数量也有一定的研究,他在无聊时经常在纸上把Ranklist上每个人的ac题目的数量摘录下来,然后从中选择一部分人(或者全部)按照ac的数量分成两组进行比较,他想使第一组中的最小ac数大于第二组中的最大ac数,但是这样的情况会有很多,聪明的你知道这样的情况有多少种吗?特别说明:为了问题的简化,我们这里假设摘录下的人数为n人,而且每个人ac的数量不会相等,最后结果在64位整数范围内原创 2020-10-02 09:03:54 · 207 阅读 · 0 评论