c++
文章平均质量分 62
一些c++的算法以及Acwing和力扣上的经典题目
joesx
想多了都是问题,做多了全是答案
展开
-
快速幂算法
(Fast Power),顾名思义,就是快速算底数 x 的 n 次幂。其核心思想就是每一步都,而相应的底数做。这样不仅能把非常大的指数给快速变小,所需要执行的循环次数也变小,而最后表示的结果不会变化。题目:求 aa 的 bb 次方对 pp 取模的值。原创 2023-07-10 14:03:05 · 63 阅读 · 1 评论 -
牛客 序列排列1
题目:给定一个长度为 n 序列 {a},对序列 {a} 进行任意排列之后得到新的数组 {b},求满足 i∈[1,n],ai≠bi的 i 最多可能个数。原创 2023-07-11 15:55:34 · 85 阅读 · 0 评论 -
纪念品领取
题目:学校校庆即将到来,学校专门设计了一款校庆纪念品,这吸引了同学们前来排队领取。学校一共有 n 名同学加入了领取纪念品的队列中,我们按照每位同学起始在队列中位置,将他们进行 1−n1的编号。为了增加纪念品领取的随机性,学校管理员决定进行m 次抽签,对于每次抽中的号码 ai,编号为 ai 的同学就会被调到当前队伍的最后一位。经过m 次抽签后,将获得校庆的纪念品。现在,mmm 次抽签的结果已经公布,学校管理员希望你来帮忙统计获得纪念品的同学的编号。原创 2023-07-11 23:37:18 · 65 阅读 · 0 评论 -
二进制枚举
二进制枚举利用的是二进制下n位长度的数有2 ^ n个,一个有n个元素的集合子集个数也为2 ^ n个,所以可以利用二进制的1,0和集合中的元素联系起来他可以实现组合也可以实现容斥对一个二进制来说1代表取这个元素0代表不取这个元素,1和0所在的位置代表元素的位置举个例子如集合{a,b,c,d,e}原创 2023-07-13 23:54:11 · 272 阅读 · 0 评论 -
莫队离线算法
莫队算法,就裸题的基础上进行修改,题目问的多少数在该区间中的出现次数与k[i]互质,用莫队来维护区间内每个数出现的次数,然后枚举区间内出现的数的次数是否与k[i]互质,枚举的话不要从1~n全部枚举,因为题目可能只给了一部分数,其他在重复,所以可以用set来存数,因为set有自动筛重的功能。接下来 m 行,每行三个正整数 l[i] , r[i] , k[i] (1 ≤ l[i] ≤ r[i] ≤ n, 1 ≤ k[i] ≤ n),描述一次询问。, a[n] },以及 m 组询问 ( l[i] ,原创 2023-07-13 20:10:52 · 67 阅读 · 0 评论 -
力扣 1696. 跳跃游戏 VI
一开始你在下标 0 处。也就是说,你可以从下标 i 跳到 [i + 1, min(n - 1, i + k)] 包含 两个端点的任意位置。输入:nums = [1,-5,-20,4,-1,3,-6,-3], k = 2。解释:你可以选择子序列 [1,-1,4,3] (上面加粗的数字),和为 7。解释:你可以选择子序列 [10,4,3] (上面加粗数字),和为 17。输入:nums = [1,-1,-2,4,-7,3], k = 2。输入:nums = [10,-5,-2,4,0,3], k = 3。原创 2023-07-10 17:45:57 · 92 阅读 · 1 评论 -
尼姆博弈(所有类型分析)
有n堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。原创 2023-07-12 09:56:28 · 1146 阅读 · 0 评论 -
松鼠排序(并查集)
松鼠宝宝有一排n个大小不一的坚果,松鼠宝宝想把坚果从小到大排序,每次他会选择两个坚果a和b每次花费1点力气把这两个坚果交换,爱动脑筋的松鼠宝宝想知道他排完这n个坚果一共需要花费的最少力气是多少?接下来一行n个整数代表每个坚果的大小(每个坚果大小都不一样,即大小为1-n的一个排列)一行输出代表松鼠宝宝花费的最小力气。第一行一个整数n代表坚果数。坚果大小x,1<=x<=n。原创 2023-07-12 23:06:02 · 108 阅读 · 0 评论 -
codeforces round 885 (div. 2)
在规定范围的矩阵内,只要朋友能抓住vika输出NO,否则输出YES,这里我们只需要判断vika与所有朋友的曼哈顿距离是否有偶数,有偶数就可以抓住原创 2023-07-17 10:01:05 · 429 阅读 · 7 评论 -
牛客周赛 Round 7
算出a和b的差值,分别除以 l 向下取整为maxx和 除以 r向上取整为minn,判断两者大小,如果maxx小于minn,输出-1,否则输出maxx和minn。她想知道有多少个2*2的子矩阵同时包含了'y'、'o'和'u'这三种字符?接下来的n行,每行输入一个长度为m的、仅由英文小写字母组成的字符串,代表游游拿到的矩阵。一个整数,代表同时包含了'y'、'o'和'u'三种字符的2*2的子矩阵数量。只有一个2*2的子矩阵同时包含了'y'、'o'和'u'三种字符。第二组询问,由于只能加2,显然无法使得1变成4。原创 2023-08-14 22:07:22 · 1994 阅读 · 2 评论 -
Codeforces Round 153 (Rated for Div. 2)
设两个参数,分别与当前值比较,更新参数值,计数。分()和((()))两种情况讨论输出。原创 2023-08-18 16:10:39 · 199 阅读 · 1 评论 -
Big Water Problem
给一个数列,会有多次询问,对于每一次询问,会有两种操作:1:给定两个整数x, y, 然后在原数组的第x位置上加y;2:给定两个整数l,r,然后输出数组从第l位加到第r位数字的和并换行。原创 2023-07-14 15:07:22 · 45 阅读 · 0 评论 -
【力扣】第354场周赛 (最长合法子字符串的长度)
初始化子串左端点 l=0,枚举子串右端点 r。对于示例 2,只要 r ≥1,那么合法子串是不能包含 le 的,所以左端点 l 必须向右移,不可能再回到 0(否则就包含 le 了)。因为左端点只会向右移动,不会向左移动,这样的单调性保证了算法的效率。当r 右移到一个新的字母时,枚举以该字母为右端点的 forbidden[i] 的最短长度。如果发现子串 word[i] 到 word[right] 在 forbidden 中(用哈希表实现),那么更新 l =i+1 并结束枚举,从而避免合法子串包含 fo原创 2023-07-16 18:09:56 · 109 阅读 · 0 评论 -
中国剩余定理及扩展
所以,孙子问题解法的本质是从5和7的公倍数中找一个除以3余2的数n1,从3和7的公倍数中找一个除以5余3的数n2,从3和5的公倍数中找一个除以7余2的数n3,再将三个数相加得到解。这就牵涉到一个最基本数学定理,如果有a%b=c,则有(a+k∗b)%b=c(k为非零整数),换句话说,如果一个除法运算的余数为c,那么被除数与kk倍的除数相加(或相减)的和(差)再与除数相除,余数不变。首先,我们假设n1是满足除以3余2的一个数,比如2,5,8等等,也就是满足3∗k+2(k>=0)的一个任意数。原创 2023-08-20 10:47:47 · 548 阅读 · 2 评论 -
2023河南萌新联赛第(六)场:河南理工大学
大小的点阵,每个点上有不同的分数,而一个点上能得 到的分数或积累的分数需要通过操作一直接继承正下方的点的分值,或者通过操作二继承下方任意一列 的间隔 k 行的点的分数并加上所在位置上点的分数。先考虑单个元素与 x异或后最大,根据异或的性质,容易得到x 应该和 a的每一位都相反,才能。当 x的第 i位取相反值 0时,该位对于最后的总和贡献就是n*2^(i-1),当有超过n/2的元素该位上为 0时, 的该位上取1 贡献更大。的个数,当 1多时 x的第 i位上取0 , 0多则取 1。原创 2023-08-17 12:43:58 · 343 阅读 · 0 评论 -
欧拉回路(详解)
欧拉通路和欧拉回路::对于图G来说,如果存在一条通路包含G的所有边,则该通路称为欧拉通路,也称欧拉路径。:如果欧拉路径是一条回路,那么称其为欧拉回路。:含有欧拉回路的图是。对有向图G和无向图H:图G存在欧拉路径与欧拉回路的分别是:欧拉路径:图中所有奇度点的数量为0或2.欧拉回路:图中所有点的度数都是偶数。图H存在欧拉路径和欧拉回路的分别为:欧拉路径:所有点的入度等于出度或者存在一点出度比入度大1(起点),一点入度比出度大1(终点),其他点的入度均等于出度。原创 2023-08-22 00:13:46 · 2745 阅读 · 0 评论 -
Codeforces Round 889 (Div. 2)
思路:将每个血量模上伤害值后放进结构体数组,对于能整除伤害值的不做操作,然后按从大到小排一下序,输出对应下标即可。思路:除去第一片面包,剩下的面包片数量等于料的数量,直接找到最小值乘二加上第一片面包。原创 2023-07-28 20:23:39 · 409 阅读 · 2 评论 -
最优贸易(记忆化搜索)
思路:这道题的标签是SPFA,但是我觉得这道题可以用记忆化搜索,用两组dfs,将从1到 i点道路上的最小值都存进min数组,将i 到n点的最大值存进max组,最后遍历min与max两数组的最大差值,输出即可。其中借助vector容器将每个点连通的点都遍历到。原创 2023-07-23 13:19:45 · 101 阅读 · 1 评论 -
2023河南萌新联赛第(四)场:河南大学
有一个可以无限重生的boss,开始时boss有1点生命值,当boss被击败后(血量小于等于0时),玩家可以获得1点积分,此后boss会复活并且血量翻倍(第一次复活是2,第二次是4,第三次是8,依次类推,复活之后boss满血),再次击败boss后可以再次获得1点积分。爷爷-孙子关系的定义是,如果在有向无环图中存在有向边 (x, y)(x,y) 和 (y, z)(y,z), 那么称 zz 是 xx 的孙子, 有序对组 [(x, y), (y, z)] 称为一个爷爷-孙子关系。子序列中有多少个他喜欢的序列。原创 2023-08-03 10:20:07 · 424 阅读 · 2 评论 -
最优屏障(栈)
M国的地势高低不平,现给出一个数组代表此国家某纬度上均匀分布的N座山的海拔高度Hi,已知每座山的山顶上都有一座哨塔,若两个哨兵分别位于第i、j(i<j)座山上,当且仅当两人所在的山比两人之间所有的山都高时,这两个哨兵可以相互监视,M国的防守能力大小为相互监视的哨兵对数。H国早已对M国虎视眈眈,H国的皇帝希望黑魔法师们可以在M国的某两座山之间放置一块巨大的屏障,M国的哨兵不可通过该屏障互相监视。对于每组数据,第一行包含一个正整数n(2≤n≤50000)。对于100%的数据,n≤50000。原创 2023-07-16 10:33:36 · 68 阅读 · 0 评论 -
逆元(求乘法逆元的几种方法)
数学上,一个数xx的倒数(reciprocal),或称乘法逆元(multiplicative inverse),是指一个与x相乘的积为1的数。整数a对模数n之模逆元存在的充分必要条件是a和n互素,若此模逆元存在,在模数n 下的除法可以用和对应模逆元的乘法来达成,此概念和实数除法的概念相同。对于一个任意数n,存在加法逆元(英语:Additive Inverse,又称相反数),其与nn的和为零(加法单位元)。n的加法逆元表示为-n。先预处理出1到n的阶乘,然后计算n阶乘的逆元,然后倒序推出n到1阶乘的逆元。原创 2023-08-08 23:48:06 · 597 阅读 · 1 评论 -
5165. CCC单词搜索
题目:给定一个 R×C 的大写字母矩阵。请你在其中寻找目标单词 W。已知,目标单词 W 由若干个大写字母构成。具体可以参照图例。请你计算,目标单词在给定矩阵中一共出现了多少次。原创 2023-08-25 11:34:15 · 165 阅读 · 0 评论 -
华华教月月做数学 两种方法: (快速幂+快速乘) (__int128+快速幂)
题目:找到了心仪的小姐姐月月后,华华很高兴的和她聊着天。然而月月的作业很多,不能继续陪华华聊天了。华华为了尽快和月月继续聊天,就提出帮她做一部分作业。月月的其中一项作业是:给定正整数A、B、P,求ABmod PA^B\mod PABmodP的值。华华觉得这实在是毫无意义,所以决定写一个程序来做。但是华华并不会写程序,所以这个任务就交给你了。因为月月的作业很多,所以有T组询问。原创 2023-07-14 17:07:26 · 138 阅读 · 0 评论 -
线段树模板+例题
是一种二叉搜索数,一般用来实现动态的区间询问,与树状数组有相似之处,但是能用树状数组实现的操作都能用线段树实现。下面是两道例题,可以试着尝试一下这几种操作敌人有 N 个工兵营地,编号 1∼N。初始时,第 i 个营地有 ai 个人。接下来有若干个命令,命令有 4 种形式:Add i j,i 和 j 为正整数,表示第 i 个营地增加 j 个人。(j 不超过 30)Sub i j,i 和 j 为正整数,表示第 i 个营地减少 j 个人。(j 不超过 30)原创 2023-07-21 17:51:42 · 71 阅读 · 4 评论 -
Tree Recovery
题目:You haveNintegers,A1,A2, ... ,AN。原创 2023-07-14 16:10:14 · 43 阅读 · 0 评论 -
MoonLight的运算问题
月色哥哥手中有一个数字 x,最初 x=0。给出一个长度为 n的序列 a,月色哥哥会从序列的第一个元素 a1按顺序看到序列的最后一个元素 an。对于序列的第 i个元素 ai,月色哥哥可以进行下面的操作之一:请求出 x 的最大值,并输出这个最大值除 998244353的余数。原创 2023-07-15 23:36:15 · 148 阅读 · 0 评论 -
子数组的解释与专题
子数组:指在一个数组中,选择一些连续的元素组成的新数组。给你一个由整数组成的数组nums。如果数组中的某个子数组满足下述条件,则称之为返回数组中的数目。是数组中的一个连续非空序列。4完全子数组有:[1,3,1,2]、[1,3,1,2,2]、[3,1,2] 和 [3,1,2,2]。10数组仅由整数 5 组成,所以任意子数组都满足完全子数组的条件。子数组的总数为 10。思路:1.用set以及unerdered_set容器暴力枚举2.滑动窗口。原创 2023-07-30 20:59:25 · 1085 阅读 · 1 评论 -
STL 基本操作(包含所有基本的函数功能)
STL 从广义上分为: 容器(container) 算法(algorithm) 迭代器(iterator)。容器和算法之间通过迭代器进行无缝连接。STL 几乎所有的代码都采用了模板类或者模板函数,这相比传统的由函数和类组成的库来说提供了更好的代码重用机会。STL(Standard Template Library)标准模板库,在我们 c++标准程序库中隶属于 STL 的占到了 80%以上原创 2023-07-10 00:19:43 · 81 阅读 · 1 评论 -
力扣 剑指 Offer 32 - I. 从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。给定二叉树: [3,9,20,null,null,15,7],打印(即按层打印),又称为二叉树的。节点总数 n<= 100。的先入先出特性来实现。借助bfs广度优先搜索。原创 2023-07-05 18:09:07 · 54 阅读 · 1 评论 -
力扣 713. 乘积小于 K 的子数组
解释:8 个乘积小于 100 的子数组分别为:[10]、[5]、[2],、[6]、[10,5]、[5,2]、[2,6]、[5,2,6]。给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。需要注意的是 [10,5,2] 并不是乘积小于 100 的子数组。输入:nums = [10,5,2,6], k = 100。输入:nums = [1,2,3], k = 0。原创 2023-07-06 16:37:36 · 51 阅读 · 1 评论 -
字典树 trie
字典树是一种树形结构,典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较。原创 2023-07-03 15:11:20 · 64 阅读 · 1 评论 -
Acwing 3692. 最长连续公共子序列
第二行输出最长连续公共子串。如果不唯一,则输出最后一个。一行,两个字符串 s1,s2s1,s2,用空格隔开。动态规划,不断更新最长连续公共子串,并记录末端位置。输出最长连续公共子串长度和最长连续公共子串。输入两个字符串 s1,s2s1,s2。第一行输出最长连续公共子串的长度。原创 2023-07-07 17:22:02 · 96 阅读 · 1 评论 -
力扣 剑指 Offer 32 - II. 从上到下打印二叉树 II
按层打印: 题目要求的二叉树的 从上至下 打印(即按层打印),又称为二叉树的 广度优先搜索(BFS)。BFS 通常借助 队列 的先入先出特性来实现。II. 每层打印到一行: 将本层全部节点打印到一行,并将下一层全部节点加入队列,以此类推,即可分为多行打印。从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。给定二叉树: [3,9,20,null,null,15,7],节点总数n <= 1000。原创 2023-07-05 23:06:28 · 50 阅读 · 1 评论 -
力扣 剑指 Offer 32 - III. 从上到下打印二叉树 III
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。给定二叉树: [3,9,20,null,null,15,7],接上篇思路,在每偶数层遍历结束,将数组反转存入即可。节点总数 <= 1000。原创 2023-07-05 23:48:18 · 53 阅读 · 1 评论 -
位运算专题(个人理解)
位运算介绍:什么是位运算呢?位运算就是二进制数据进行运算的运算符,这里我们主要说到位运算符优先级比较靠后,结合使用时一般需加上括号写一个函数,求两个整数之和,要求在函数体内不得使用 +、-、×、÷+、-、×、÷ 四则运算符号。原创 2023-07-09 11:04:56 · 98 阅读 · 1 评论 -
浅谈滑动窗口及个人理解
给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组的长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit。滑动窗口每次只向右移动一位。解释:满足题意的最长子数组是 [2,4,7,2],其最大绝对差 |2-7| = 5 <= 5。输入:nums = [4,2,2,2,4,4,2,2], limit = 0。输入:nums = [1,3,-1,-3,5,3,6,7], k = 3。输入:nums = [10,1,2,4,7,2], limit = 5。原创 2023-07-07 16:15:56 · 97 阅读 · 1 评论 -
洛谷—模板字典树 P8306
模板字典树原创 2023-07-04 18:41:38 · 142 阅读 · 0 评论 -
力扣 2401. 最长优雅子数组
两个不同的数相与结果为0,那么这2个数一定没有一个同一位置的1。如果与当前记录的结果now相与不为0,那么加入的这个数不满足条件,需要将滑动窗口左边往右移,对于每一个离开窗口的数,用记录的窗口结果now与其做异或运算。如果 nums 的子数组中位于 不同 位置的每对元素按位 与(AND)运算的结果等于 0 ,则称该子数组为 优雅 子数组。解释:最长的优雅子数组长度为 1 ,任何长度为 1 的子数组都满足题目条件。解释:最长的优雅子数组是 [3,8,48]。注意:长度为 1 的子数组始终视作优雅子数组。原创 2023-07-08 22:41:16 · 88 阅读 · 0 评论 -
字符串的全排列
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。我们假设对于小写字母有 a<b<…<y<za<b<…<y<z,而且给定的字符串中的字母已经按照从小到大的顺序排列。原创 2023-07-07 09:52:47 · 144 阅读 · 1 评论 -
力扣739 每日温度
遍历整个数组,如果栈不空,且当前数字大于栈顶元素,那么如果直接入栈的话就不是 递减栈 ,所以需要取出栈顶元素,由于当前数字大于栈顶元素的数字,而且一定是第一个大于栈顶元素的数,直接求出下标差就是二者的距离。继续看新的栈顶元素,直到当前数字小于等于栈顶元素停止,然后将数字入栈,这样就可以一直保持递减栈,且每个数字和第一个大于它的数的距离也可以算出来。输入: temperatures = [73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1,0,0]输出: [1,1,1,0]原创 2023-07-05 17:19:11 · 50 阅读 · 1 评论