- 博客(87)
- 收藏
- 关注
原创 算法常用模板
一、数论1.试除法判定质数#include<iostream>using namespace std;int ff(int x){ if(x < 2) return 0; for(int i = 2; i <= x / i; i++){ if(x % i == 0) return 0; } return 1;}int main(){ int t; cin>>t; int x;
2024-04-12 21:36:51
668
1
原创 基础贪心问题
2.排队接水3.线段覆盖按区间右端点升序排序,如果能接上就接4.合并果子用小根堆维护最小值,每次取出两个最小值5.小A的糖果如果两个相邻的多了,那就先减去第二个,因为第二个还关联第三个6.删数问题删掉下坡数7.陶陶摘苹果(升级版)按花费力气升序排序,先摘花费力气小的8.铺设道路大的带着小的填,如果后面一个大于前一个高度,那就多填这个差值,最后加上第一个需要填的高度9.混合牛奶按照价格升序排序,先买便宜的10.纪念品分组让大的和小的组合11.跳跳!高低高低
2024-04-08 16:12:30
577
原创 Codeforces Round 933 (Div. 3)
用 set 记录所有可能的位置,顺时针就是:(i + r - 1) % n + 1,逆时针就是:(i - r + n - 1) % n + 1。每次根据 ai 迭代 ai+1 和 ai+2。如果有字符 p 就把他替换掉。
2024-04-06 11:06:57
343
原创 Codeforces Round 937 (Div. 4)
因为最多只能有一个字符不同,那么每个长度的区间只需要枚举连续的两段,判断即可。指数型枚举每一位是 0 还剩 1,然后除掉这个数,再继续搜索。
2024-03-29 11:29:29
537
原创 Educational Codeforces Round 163 (Rated for Div. 2)
i - j| + |ai - aj| <= k,让下标差大的点权差小,从左到右每 k 个进行这样构造,不足 k 个就按剩下的个数进行构造。3.如果拆开,代表当前数大于前一个数,此时拆开要满足几点要求:后面的个位数不大于前一个数,前面的个位数不大于后一个个位数。区间长度是独立的,从大到小枚举区间长度,如果找到了直接退出。1.数字最多两位,所以数字的拆解方案惟一。2.数字拆开一定变小,所以最后一个数不拆。
2024-03-28 17:19:57
468
原创 Codeforces Round 934 (Div. 2)
如果这个数在数组中出现了两次或以上的次数,那么bob必然无法阻止Alice选中(因为bob选一次后Alice就可以选这个数),所以bob应该首选最小的且数组中只有一个的数,但是为Alice先选,换个角度也就是说Alice可以“救”一个数,所以最小值应为数组中只有一个且第二小的数。(当然如果存在一个数没有出现且比上面得到的数小,那么最小应为没出现的数)再考虑下两边的某两个不等的数调换位置,那么两边会出现对子,对子XOR为0,其他数仍旧一致,那全部XOR结果依旧相等;
2024-03-27 04:19:59
323
原创 Codeforces Round 935 (Div. 3)
先预处理 1 个数前缀和,如果左边 0 和 右边 1 都大于等于 一半,那就取离中点最近的点。先求 m 后最小的值,然后求 a[i] + b[i + 1] 的最小值,b 为后缀和数组。先看看这个求的值在不在二分边界处,如果在就不用交换,如果不在,那就交换到边界处。
2024-03-26 21:50:53
330
原创 蓝桥杯2023真题(4)
路线:2 -> 6 -> 5 -> 11.一个点都不去去掉的花费记作sum2.去掉第一个点,sum - cost[2 -> 6]3.去掉第二个点,sum - cost[2 -> 6] - cost[6 -> 5] + cost[2 -> 5]dfs 中的参数不是一下就想到的,而是在写的过程中,你发现需要某个信息,而这个信息没有被提前记录,所以可以把这个信息当作参数记录下来正解就是优化 cost 的求法。
2024-03-11 20:46:24
590
原创 蓝桥杯练习题——树状数组和线段树
时间复杂度:O(logn),查询和修改都是解决问题:单点修改、区间查询,也可以区间修改,单点查询原理:数组下标必须从 1 开始,如果下标二进制最右边有 k 个 0,那就是第 k 层,lowbit(x) = 2 ^ k,每个 c[x] 存储的是 [x - lowbit(x), x] 区间的和。
2024-03-10 15:51:13
902
原创 蓝桥杯练习题——归并排序
1.求最小值的时候,可以直接按升序排序,这样得到的值就是最小值2.求最小交换次数的时候,不能直接排序,因为只能交换相邻的数,只需要知道他们的相对大小,所以可以先用离散化,把火柴高度映射成 1 到 n,然后用一个中间数组 c,让 b 数组按照 a 数组的顺序归并排序,交换相邻两个元素,最多只会使得逆序对数量减一。
2024-03-08 22:59:43
625
原创 背包九讲——菜鸟九题
默认 f 数组初始化为 0,所以 f[i] 不一定是装满 i 容量的最大价值,如果想让 f[i] 表示装满 i 容量的最大价值,可以初始化 f 数组为负无穷,f[0] = 0下面的题目都在 acwing 题库前面。
2024-03-07 16:45:34
782
原创 蓝桥杯练习题——双指针
1.从大到小排序,把数组分成三段,[1, j] (j, j2] (j2, n],j 以 i 为界限,j2 以 i - 1 为界限2.第一部分引用数已经够了,第三部分引用数差太多,判断第一部分 + min(L, 第二部分)是否有 i 篇int。
2024-03-06 00:51:30
687
原创 kuangbin专题——简单搜索
1.dfs 参数里枚举每一行,然后在里面弄两个分支,选或者不选,选的话就枚举这一行的所有元素2.注意最后一行要先判断,再返回。
2024-03-05 16:49:56
471
原创 蓝桥杯练习题——dp
尽可能分成两堆重量相同,使得相撞后重量最小1.f[j]: 容量为 j 的背包,最大价值3.全部 = 04.倒序遍历public:i < n;i < n;i++){j--){
2024-03-05 00:08:02
6796
2
原创 蓝桥杯练习题——差分
1.区间同时加减 1,可以转换成一个差分数组两个端点的操作2.用 p 减去 t 数组,得到要消除的数组 a,对 a 求差分数组3.差分数组一正一负为一个操作,因为是把这个原数组区间加上了 1,单独的正负为一个操作4.总共需要的操作就是差分数组里 max(正数和, 负数和)
2024-03-04 11:12:11
677
原创 蓝桥杯练习题——前缀和
1.求最坏情况下,画的墙总和是多少2.画的墙在中间连续一段,画了的墙长度是 n / 2 向上取整3.取最大的 n / 2 向上取整区间和。
2024-03-04 02:38:25
780
原创 蓝桥杯练习题——二分
1.随着订单的增加,每天可用的教室越来越少,二分查找最后一个教室没有出现负数的订单编号2.每个订单的操作是 [s, t] 全部减去 d。
2024-03-03 14:15:27
651
原创 Redis
在 redis 所在目录,打开 cmd 然后输入 redis-server.exe redis.windows.conf 回车,tab可以补全。
2024-02-21 23:22:06
869
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人