![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
蓝桥杯题解
文章平均质量分 62
机械之忍
y门门外弟子
展开
-
蓝桥算法训练 P0802
思路:本题没有乘除操作,也没有括号,仅仅是加和减,比较容易。开两个栈,分别储存运算符号和数字,然后遍历一遍字符串动态处理数字就行了,但是需要注意,一定要动态更新数字的操作!每存一个符号就要操作一次,千万不要等数字和符号都存好了再统一操作,因为操作的过程是从栈顶拿数和符号,比如这种情况“1+3-6+5”本应等价于“5+(-6)+3+1”,但实际操作起来就变成了“3-(5+6)+1”,因为符号位与加号相邻的减号没有考虑到,为了避免这种情况就要时时进行操作。具体细节见代码Code:#incl...原创 2021-12-07 10:27:37 · 1191 阅读 · 1 评论 -
蓝桥杯 翻硬币
原题链接:1208. 翻硬币 - AcWing题库思路:首先我们先想想这道题的暴力做法:从左往右依次操作一遍,只要当前位置硬币不匹配,直接翻转,而由于是从左往右操作,所以当前位置-1一定是匹配上了的,所以要翻当前位置和当前位置+1的硬币。操作完后遍历一下两个串,看看是不是都匹配上了,如果都匹配上了再更新答案。然后依次枚举每个起点执行上述流程,这样就涵盖了所有可能了。接下来分析一下暴力的时间复杂度:比较直观,每次遍历一遍,一共遍历n次,所以时间复杂度O(n²),这里说明一下,事实上时间复杂度要原创 2021-11-01 11:11:58 · 168 阅读 · 0 评论 -
蓝桥杯 错误票据
原题链接: AcWing 1204. 错误票据 - AcWinghttps://www.acwing.com/activity/content/code/content/1981205/思路:本题思路很简单,把所有输入的数存到数组里,排序,然后遍历一遍就行了。判重的话就开个新数组记录一下每个数的出现次数即可。本题的难点就在于处理输入,需要对C++语法比较熟悉做法如下:处理输入的所有数字 遍历计数器数组,找到重号 遍历一遍排好序的数组,如果不连续且不是重号,那就是断号,记录下来 分别原创 2021-11-01 17:33:10 · 73 阅读 · 0 评论 -
蓝桥杯 小朋友排队
原题链接:1215. 小朋友排队 - AcWing题库思路:贪心+树状数组本题是模拟的冒泡排序的流程,首先从直觉上判断,每个小朋友的怒气值既然跟被交换的次数有关,那就肯定跟与其相关的逆序对数量有关,而既然要求与其相关的逆序对,只需求出该小朋友左侧比他高的小朋友的个数和右侧比他矮的小朋友的个数即可。那么下一个问题是,如何证明直觉做法的正确性,换言之,如何证明这样求出来的怒气值最小。下面我给出证明过程供参考:对于冒泡排序,如果存在k个逆序对,那至少要交换k次才能得到正确的顺序,因为冒泡排序每原创 2021-11-04 23:50:49 · 153 阅读 · 1 评论 -
蓝桥杯 交换瓶子
原题链接:1224. 交换瓶子 - AcWing题库https://www.acwing.com/problem/content/1226/看过我博客的读者对这题应该有些眼熟,没错!不久前我刚写过小朋友排队的题解,这道题是不是很像呢,也是跟逆序对有关系,只不过这道题的逆序对稍微有些特殊思路:我刚拿到这个题,第一反应就是逆序对,再看了眼数据范围,顿时就高兴了起来,本题数据范围才1e4,完全可以双指针暴力枚举,妥妥的O(n²)不超时,但当我打完双指针跑样例的时候,发现第二个样例都过不了,于是我仔细琢原创 2021-11-10 23:33:47 · 466 阅读 · 0 评论 -
蓝桥杯 连号区间数
原题链接:1210. 连号区间数 - AcWing题库https://www.acwing.com/problem/content/1212/思路:首先想想暴力,直接两重循环暴力枚举所有子区间,然后给每个子区间排序,再遍历一遍子区间看看是不是连号区间。下面给出暴力代码片段bool check(int l,int r){ sort(backup+l,backup+r+1); for(int i=l+1;i<=r;i++) { if(backup[原创 2021-11-16 00:00:23 · 178 阅读 · 1 评论