c++
不要再掉头发啦!
这个作者很懒,什么都没留下…
展开
-
895. 最长上升子序列
如果还不能理解的话,可以想想求f[i]的规则,其实每个f[i]都可以由前面的f[i]推导出来,就拿f[7]举例,他其实是在找以a[7]结尾之前满足要求且最长的子序列,而我们找到的就是125,而125又是由a[6]结尾之前最长且满足要求的子序列,即1 2.可以理解为一个递推问题。拿样例来举例子,我们得到的应该是1256,那么应该就是f[7]的时候取最长。刚开始f[7]=1,a[7]=6。原创 2023-03-30 20:51:19 · 128 阅读 · 0 评论 -
1211. 蚂蚁感冒(第五届蓝桥杯省赛C++A/B组)
其实翻译过来就是 往右走并且在第一只蚂蚁的左边 和 往左走并且在第一只蚂蚁的右边 的蚂蚁感染。我们发现也是表示 往右走并且在第一只蚂蚁的左边 和 往左走并且在第一只蚂蚁的右边 的蚂蚁感染。这样代码量大大减少,如果是想思路也可以按照我上面那个来想,然后再考虑要不要优化代码。//第一种情况,第一只蚂蚁往左走,左边的反向和右边的同向会感染。//第二种情况,第一只蚂蚁往右走,左边的同向和右边的反向会感染。原创 2023-03-18 15:13:25 · 176 阅读 · 0 评论 -
1230. K倍区间(第八届蓝桥杯省赛C++B组,第八届蓝桥杯省赛JAVAB组)
将代码仔细分析s[r]-s[l-1])%k,这句代码的意思不就是找两个s数组里的数,他们的模k的余数相同吗?那我们不就可以直接统计我们当前的s中有几个数的余数相同,然后得到答案吗。在最基本的暴力里,时间复杂度大约是O(n^3),根据题目的数据范围,我们大致可以看出能通过的时间复杂度大约是O(n)左右,那么就需要降幂。在本题中采用暴力解法超时过于离谱,所以需要一步步优化。首先用前缀和将最里层循环取代,这个大家应该都会。在暴力做法里,我们代码大致是这样。其次比较难想的一点就是取模。#### C++ 代码。原创 2023-03-16 21:37:23 · 49 阅读 · 0 评论 -
99. 激光炸弹
一个int 4 个bit,开一个数组 5000 * 5000 * 4=100000000,1M为1048576个字节,大约100万,激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆炸范围,即那个正方形的边必须和。�,分别代表地图上的目标数目和正方形包含的横纵位置数量,数据用空格隔开。输出一个正整数,代表一颗炸弹最多能炸掉地图上目标的总价值数目。��,�� 表示目标在地图上的位置,每个目标都有一个价值。�×� 个位置的正方形内的所有目标。��,��,��,分别代表目标的。:不同目标可能在同一位置。原创 2023-03-16 20:40:28 · 87 阅读 · 0 评论 -
1227.分巧克力(第八届蓝桥杯省赛C++A/B组,第八届蓝桥杯省赛JAVAA/B组)
然后后来就是想到二分,从题目给的数据范围里找出符合条件的那个数。题目给定数据范围是1~100000,那就从这个范围里找符合题目要求的数。构建好二分框架之后,再去具体实现check()内容。* check内容其实更好弄明白,我现在拿到一个数,我直接检查我手上的巧克力按照这个数切到底。能不能够分给k个小朋友吃。就直接创一个计数器res,切一块记一次,如果够了说明就是这个数。* 拿到这个题的时候我第一个想起来的是短边效应,即最短边的长度决定巧克力的大小(虽然在这。个题里用处不大,但是我觉得还是很有意思的。原创 2023-02-28 20:17:54 · 140 阅读 · 0 评论 -
1221.四平方和(来源:第七届蓝桥杯省赛C++A/B组,第七届蓝桥杯省赛JAVAB/C组)
就是上面那个其实就是存的a²+b²的值时分别对应的cd。那在下面枚举的时候就是直接取ab最小的时候输出就结束了。原创 2023-02-27 23:45:14 · 67 阅读 · 0 评论 -
翻硬币(第四届蓝桥杯省赛C++B组)
第一个是比对,比对他们每一位是否相同,相同则继续比对下一位,不相同就一定要进行操作,因为题设能操作的部分其实只有两个地方,该位置和其相邻的位置,至于左边还是右边其实是可以不用考虑的。因为比对过了的就不能再改变他的状态了,所以可操作的数就只能是按照比对顺序的下一位操作。现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?两行等长的字符串,分别表示初始状态和要达到的目标状态。我们约定:把翻动相邻的两个硬币叫做一步操作。原创 2023-01-30 17:38:34 · 129 阅读 · 0 评论