
C++ 蓝桥杯
C++ 蓝桥杯
YYJ333_333
大一菜鸟
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
蓝桥杯宝石组合(数论,因数)
或者多带几组数据会发现 S与三个数的最大公因数程正比,所以只要在这组数中找到3个数的最大公因数是所有组合里最大的即可,但是如果直接3个for循环分别找公因数会超时,所以我们干脆对每个数都找到它的因数,(因数最大也就是Hi最大为1e5)开vector二维数组,其中v[i][j]表示当因数为i时的第j+1个数,最后由于要找最大因数,我们倒叙输出即可。如果直接按题意暴力的话,只能过30%,所以应该推导出更简便的公式,推导如下。原创 2025-02-22 18:01:14 · 542 阅读 · 0 评论 -
蓝桥杯拔河问题(前缀和与差分,multiset,区间冲突)
至于查找以i 为终点的区间会不会与其他区间重叠呢,其实不会,因为在查到以i 为终点的区间时,前面的循环已经把所有起点<=i的都删除啦。最终复杂度时o(n**2*logn)不超时。本题的题意是要找两个不重叠的区间对应的差值最小。多个区间和问题首先想到前缀和与差分,两个for循环遍历所有可能的区间,复杂度是o(n**2)。,首先第一个for循环删除以i为起点的区间,这样是为了避免[a,i][i,b]这种一个区间的终点是另一个区间的起点造成重叠的情况。我们可以将每个区间值存入multiset,难点在于怎么。原创 2025-02-22 11:00:39 · 826 阅读 · 0 评论 -
蓝桥杯 r格式(高精度*低精度)
首先注意到本题的数字大小很大,需要用到高精度,因此应该定义string来存储数据d,为了后续计算,在存储完字符串d之后还需要先将每一位转化为数字并且找到小数点在第几位,而数据2**n由于直接算出来会超范围,所以我们采取每次将d的每一位乘2 来算即可。原创 2025-02-21 20:28:47 · 1274 阅读 · 0 评论 -
蓝桥杯好数
主要考察能否逐位取数,注意细节p=i,这样不会改变i,否则会导致循环错误。思路:本题朴素方法的时间复杂度是。原创 2025-02-20 20:44:36 · 484 阅读 · 0 评论 -
蓝桥杯15 填空题
直接看很难找到相应的函数,但是我们可以想到round 它的功能是找到一个与浮点数最近的整数,比如2.77离3近,则为3,2.11离 2近,则为2。:如果直接按照题意画路径会发现很复杂,也比较难直接找到打到角落的条件,这时候可以想到化曲为直,复杂问题简单化,在初中的时候学过光的反射,也画过镜子的光路图,按镜面对称不会改变光的路程,这里也是一样的,把左面扩展开来,最终当dx和dy分别是343720和233333的倍数即可。小于浮点数的实际小数位数,多余的位数会被截断(不会四舍五入)。原创 2025-02-20 19:29:34 · 613 阅读 · 0 评论 -
蓝桥杯班级活动
题目要求有且仅有两个数相同,因此,我们要分别记录只出现一次的数和出现超过两次的数,如果只有出现一次的数,且其个数为c1,那么需要修改c1/2;如果只有出现超过两次的数,且其个数为c2,那么修改次数为c2,显然可以发现,修改只出现一次的数会更简单;那么如果c1,c2同时存在时,当c2>=c1,则要修改c1+(c2-c1)=c2次,反之,则要修改c2+(c1-c2)/2次。为了公平,老师给每名同学随机分配了一个 n 以内的正整数作为 id,第 i 名同学的 id 为 ai。输出共 1 行,一个整数。原创 2025-02-17 22:39:58 · 570 阅读 · 0 评论 -
蓝桥杯平方差(打表)
细节:(r+1)/2是为了求出0~r内所有奇数的个数(如3->2),r/4找4的倍数(7->1),而且题目中l,r是两闭区间,所以要减去0~(l-1)区间内奇数个数。题目数据是1e9,只有时间复杂度小于o(n) 才可以通过。暴力肯定不行,类似这种数学题,一时半会没有思路的,我们可以通过。我们列举0~100的数,不拿发现符合题意的数的规律为该范围内所有的奇数,和4的倍数。,快速罗列一定范围内的数据找规律。原创 2025-02-17 20:06:34 · 537 阅读 · 0 评论 -
并查集知识整理、蓝桥杯修改数组
分析:题意与并查集非常像,最后是要输出每个数的跟节点,如果这个数没有出现过,也就是自成一个集合,也就是自己就是自己的根节点,那么输出它本身;(1)路径压缩:o(nlogn)在查询的过程中将所有节点都指向根节点,这样就导致它不能保持一开始树的形态,但是能在一次查询中改变多个节点,后续查询更便捷,因此可持久化并查集等修改代价较高的情况。(1)按秩合并、按秩合并:o(nk)将其中一个深度较小的树的根节点的父节点修改为另一个根节点。其结构类似于树林,存储了多个互不相干的树,每棵树的根节点代表着这棵树的全部节点。原创 2025-02-06 09:44:40 · 655 阅读 · 0 评论 -
蓝桥杯生命之树(DP)
无向无环图的存储,且节点编号从1 开始(遍历注意一下)。本题是求这颗树中相互连接的节点的和最大问题,也就是连通块和最大问题,用dfs遍历图,dp[x]表示以节点x为跟的部分的和,如果dp[v[x][i]]小于0,那么不会增大dp[x]的值,所以舍去,如果dp[[x][i]]>0,则dp[x]+=dp[[x][i]],最后在比较各部分的dp,找到最大值即为所求。注意:0ll是表示长整型的0,max比较一般要同类型。原创 2025-02-06 10:51:32 · 440 阅读 · 0 评论 -
蓝桥杯公因数匹配(算数基本定理、质因数分解函数、map与vector)
算数基本定理:任何一个整数都可以分成多个质数的乘积,如果两个数含有相同的质数,那么一定有大于1的最大公约数。思路:如果直接暴力,即两层for循环,则o(n**2),超时。原创 2025-01-29 19:44:44 · 421 阅读 · 0 评论 -
BFS与连通块结合
本题分为陆地和海水,因此在需要先遍历满足条件的,也就是为陆地且之前没有被访问过的可以进行BFS,进行多少次BFS就是有多少个连通块。简而言之就是满足在题目条件下是连在一起的,有的题目是上下左右四个方向,有的则是包括斜对角的八个反向。q.push(s), visited[s] = true//标记是否被访问过。q = new queue()//先进先出采用队列。q.empty()) {//判空。u = q.pop()//出队列。new//根据t找到更多新的节点。q.push(v)//入队。原创 2025-01-25 17:25:33 · 473 阅读 · 0 评论 -
蓝桥杯更小的数(区间DP)
小蓝有一个长度均为 n 且仅由数字字符 0 ∼ 9 组成的字符串,下标从 0 到 n − 1,你可以将其视作是一个具有 n 位的十进制数字 num,小蓝可以从 num 中选出一段连续的子串并将子串进行反转,最多反转一次。小蓝想要将选出的子串进行反转后再放入原位置处得到的新的数字 numnew 满足条件 numnew < num,请你帮他计算下一共有多少种不同的子串选择方案,只要两个子串在 num 中的位置不完全相同我们就视作是不同的方案。注意,我们允许前导零的存在,即数字的最高位可以是 0 ,这是合法的。原创 2025-02-04 09:34:37 · 1676 阅读 · 0 评论 -
C++ 大整数加法详解
大整数加法原创 2025-01-20 16:25:03 · 451 阅读 · 1 评论 -
蓝桥杯飞机降落(DFS、贪心)
比较明显,类似基础的活动时间安排贪心,即如果每架飞机降落的时间尽可能考前,那么留给后面飞机的时间就多,就更有可能完成所有飞机的降落。而时间应该取max(Ti,time(前一架飞机降落的时间)),当前一架飞机降落的时间超出后一架飞机时,则该种方案不成立,当中断。题目对数据要求不是很大,且想要看看是否能找到一种飞机降落可行的顺序,所以可以尝试暴力dfs。:对每一个分支深入到不能再深入为止,且每条分支上每个节点只能出现一次。原创 2025-01-26 15:02:47 · 538 阅读 · 0 评论 -
蓝桥杯填充(贪心)
思路:因为题目要求字串不重叠,所以当我们遍历到某一个字符时可以将它先与前面的比较,如果前面的字符没有配对且与它相等,那么匹配,否则就继续向下遍历,如果遍历到?,其实就是少了判断相等的步骤。每次只看前面的,因为是连续且不重叠子串,所以如果前面的字符与 该字符不匹配,那么它一定不能与后面的字符匹配。而且这样匹配也不会影响后面字符的匹配。原创 2025-02-03 11:20:12 · 335 阅读 · 0 评论 -
蓝桥杯景区导游(DFS、树上前缀和、最近公共祖先)
这样v[u][i].first就表示与U直接连接的第i个点,v[u][i].second就表示u到与u连接的第i个点之间的距离。接着,由DFS可以知道两点之间的距离,o(k*N),这里用bool型,当该路径能够到达我要求的终点时,也就是该路径上DFS全返回true时,才能得出最终的m[{s,e}].树链剖分:不需要知道明确的根节点,一般以1为根节点,代码复杂o(n),用于需要频繁查询和更新树上路径问题。倍增法:需要知道明确的根节点,代码简单,只用于多次公共祖先查询;原创 2025-02-05 09:45:24 · 511 阅读 · 1 评论 -
蓝桥杯字串简写(二分)
代码:一些细节注意点在注释上写了,注意用vector.size()时,初始化vector<> v(N),不要写N,不要规定范围(因为这个找了半天错误,服了),还有,v.size()返回的是无符号整型,如果v.size()-x,x>1的话,一定要注意不能为负,或者强制类型转换也可以,(int)v.size()-x;如果暴力,o(n**2),超时,想到可以先与处理一下,记录c1出现的位置,再根据c2的位置用二分法看前面有多少个符合条件的c1。原创 2025-01-31 21:05:44 · 421 阅读 · 0 评论 -
蓝桥杯三国游戏(贪心)
分析: 本题的意思是选择几个事件(可不连续),使得某一个国家胜利,但是具体是哪一个国家胜利呢 ,一共是三种可能,可以分别枚举,其思路和蓝桥杯接龙游戏是一样(对每个时间都有选或不选)但会超时。:(假设a赢)s=sum_a[i]-sum_b[i]-sum_c[i]>0, 只要对s进行排序,依次加起来加到某个数使s为负数(因为事件的发生可不连续)。不是从整体上考虑最优解,而是从局部考虑,类似dp贪心的决策是需要有无后效性的,且局部最优解可以推到整体最优。,最后再取事件的最大值。原创 2025-02-03 09:35:20 · 777 阅读 · 0 评论 -
蓝桥杯冶炼金属(二分暴力、直接算)
在C++中,整数除法有向下取整,也就是说结果会抛弃小数部分。临界:上界取小75/3=25 53/2=26.5 59/2=29.5 下界取大 75/4=18.7 53/3=17.6 59/3=19.6,又V为整数,所以取20 和25。法二:暴力枚举: 由于V可能会到达1e9,爆了,所以直接枚举所有数再带入N个式子比较的话不可取,用二分法优化,就要找到二分的检验函数。如果x<min:b[i]<=a[i]/x ,如果x>min:b[i]>=a[i]/x,对max同理。法一:找到规律直接算。原创 2025-01-27 21:38:53 · 396 阅读 · 0 评论 -
蓝桥杯接龙序列
面对最优解问题,dfs是枚举所有方案并判断该方案是否合法,在合法方案中选出题目要的最优解。时要注意剪枝:u(当前数的索引)>=n(总个数)或者 剩下的数与c(已被选)的数的总个数小于等于目前最大的答案,那么剪枝。最后,不选一个数的情况有两个:不符合接龙条件、符合接龙条件但是不选,所以dfs(u+1,c,l);本题f[i][j]表示在第i个数字之前被删掉的数字个数,其中j表示第i个数字是以j数字结尾的,因此0<=j<=9。这里注意一下数的最大值最小值求解,一个数的一对数据可以用。,但o(n**2)超时。原创 2025-02-02 21:58:56 · 526 阅读 · 0 评论 -
蓝桥杯卖瓜问题(dfs剪枝优化、贪心)
对于每一个瓜都有不取,取全部,取一半 这三种情况 ,因此,时间复杂度较高,然而,题干数据又有点大,所以要想到剪枝。(1)由于要找到最优解,所以如果正在探索的方案的刀数已经大于或等于前面的方案,则不需要再搜索下去了。:阻止不到南墙不回头的情况,将不可能的道路扼杀在摇篮里,它需要较高的观察力和敏感度,本题。:经过观察,可以发现,如果将瓜全部从大到小排序,这样可以减少试错次数。(2)如果总重量达不到要求,也就是已经遍历到最后一个瓜了,则剪枝。(4)当前瓜加上后面剩余的瓜都都达不到要求值,则剪。原创 2025-01-26 17:32:38 · 364 阅读 · 0 评论 -
蓝桥杯抓娃娃(前缀和)
又本题是多次查询,且题目可以化简为某一段区间上中点的个数,所以可以联想到前缀和(在1-2e6的范围内,在递增每个最小单元时求前n个单元内中点的个数),当输入L和R时就可以以o(1)的复杂度进行查询。注意:由于数组下标必定为整数,所以我们以中点两倍形式来记录,即a[l+r].由下图分析,只要线段的1/2处包含再区间内即可。原创 2025-01-27 10:12:14 · 398 阅读 · 0 评论 -
蓝桥杯翻转
思路: 经观察,101->111,010->000每3个只能改变中间一个(那么放到一长串字符中,相邻两个字符只能改变一个),代码直接翻译题目即可。原创 2025-02-03 15:16:03 · 308 阅读 · 0 评论 -
蓝桥杯整数删除(优先队列&&pair,模拟链表)
优先队列:便于找到最值并且出队,相当于逻辑上删除该数下次不再比较这个数,但是缺点是不能实时更新//由于每删除一个数,其两边相邻数都要+1,因此,priority_queue里的数不一定是实时的,所以需要引入st[]存储更新,且在每次输出最小值时都要比较一下。暴力:for循环找最小值,o(n**2)超了,用vector删除优点是不需要模拟链表的删除过程,不需要实时记录被删除的数的索引,(注意min值是要在每个K循环之前都要更新的,呜呜,一开始我在循环外更新,就出错了,找了好久才发现错因)原创 2025-01-31 09:51:14 · 1181 阅读 · 0 评论 -
C++string 常用点
6.提取:s.stubstr(pos,n);9.清除 判空:s.clear();string 是C++中stl模板库里的一个内容,其长度不固定,可以进行加运算和比较运算。5.大小: s.size();法二:getline(cin,名)从第一个有效字符开始,直到换行符和tab为止。(1)加运算:注意加号两边不能全是常量,如"yyj"+”jyy"就是不可行的。1.初始化(string s="abc"也行,这里忘记写了,下面有噢)法一:由下图可知,cin读入时会从第一个有效字符开始到第一个空格为止。原创 2025-01-21 17:45:21 · 260 阅读 · 0 评论 -
蓝桥杯管道(二分、区间合并)
经过一段时间,水会以阀门为中心蔓延得到一段区间,当我们将所有区间的左端点以从小到大的顺序排序之后,如果该区间左端点大于前一区间的右端点+1(本题),说明不连续;在连续的基础上合并时,左端点取小,右端点取大,最终如果长度小于len,则时间在min的左侧,反之在右。如果直接暴力枚举,那么枚举的范围大概是min(s1,...sn)~min(s1,...sn)+1e9 ,最坏的情况是si=1e9且为一开始的阀门且只开一个阀门,那么就需要2e9的时间,显然会超时,且答案时单调的,所以。原创 2025-01-28 16:41:13 · 731 阅读 · 0 评论 -
蓝桥杯砍树(无向无环图存储、树上差分、公共祖先详解)
(因此也可以用bfs),对于m个点对,找到它们之间的路线并作标记,即路线上的边权都+1,这样最后如果有边的边权是=m,则说明该边是所有路线的必经之路,它就是符合题目条件的边之一,最后倒叙找边,这样可以找到边编号最大的,即可。,开vector二维邻接矩阵, e[a].push_back(b);存两遍,有向则存一遍。,对应关系想到map,又边是由两点表示,则用pair.用dfs遍历图,接着由于是无环图,所以每两点之间。原创 2025-02-01 21:36:48 · 683 阅读 · 0 评论