合集-算法
摘要:洛谷题单 2023 官方题单(1~4 月) 轴对称 把YES和Yes搞混了一直过不去……然后忘了多维数组在函数怎么定义为参数了。 #include<stdio.h> //多维数组定义为参数的时候,要写为int jpg[100][100][3] //注意输出格式是Yes还是YES void check
阅读全文
摘要:写的脑子都抽了,果然实在做不出来还是得问一下ai。 我自己最后又自己写了一下,是这个: #include<stdio.h> int p,q,pivot,mid,temp; int n; int P[100100]; void quick(int P[100100],int l, int r){ if
阅读全文
摘要:为了保研准备机考,写一下算法题,之前还没什么好感,写了一下,通过的时候还是很有成就感的。不过今天好困,就做这些,今天早下班了。前几天在开组会出题之类的,都在熬夜。 易错点总结 太久没写c了,但是配合LLM还是会写很多的,自己从头写的话各种小问题,大佬轻喷。 单引号表示字符,双引号表示字符串,不要搞混
阅读全文
摘要:关于逆序对:当发现 P [p] > P [q] 时,左半部分从 p 到 mid 的所有元素都与 P [q] 构成逆序对,因此一次性加上 mid-p+1 归并排序代码分析报告 简单来说就是先确认分界点,然后递归fen,然后做合并,也就是两个指针比较小的放入临时数组,最后全部复制到原来的数组中,只不过一
阅读全文
摘要:基本思路 基本思路就是左边界右边界,注意特殊情况,然后如果猜大了就把右边界设置为猜的-1,小了左边界为其+1即可。 AcWing 789. 数的范围 #include<stdio.h> void query(int P[100100], int k, int n){ int l,r,p,f; f=0
阅读全文
摘要:高精度加法 把每一位对齐,然后加法进位。 #include<stdio.h> #include<string.h> char A[100100] = {0}; char B[100100] = {0}; int S[100100] = {0}; void add(char A[100100], ch
阅读全文
摘要:前缀和 第一次写的时候,是想直接线性加起来。结果超时,因为是O(m*n): 然后直接跟豆包学了一下,就是把全部先加起来,这个区间的和就是presum[rp-1]-presum[lp-2] #include<stdio.h> int n,m; int P[100100]={0}; int presum
阅读全文
摘要:求二进制中的1。 突然发现得转c++ #include<iostream> using namespace std; int Countone(long long x){ int res=0; while(x){ res += x & 1; x = x >> 1; } return res; } i
阅读全文
摘要:最大不重复数组 学习了新的语法,主要是vector<int>。 emm,这个的原理很简单,就是用左右两个指针和维护一个最后出现位置数组。如果发现最后出现位置不是-1,那么去和左指针比较,如果左指针小就更新。 #include<iostream> #include<vector> using name
阅读全文
摘要:离散化 给出x和c在数轴上赋值,给l和r求区间和。 #include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <climits> using namespace std; int ma
阅读全文
摘要:我看了下其他人的wp,单链表维护一个呀把头节点会更好,双链表就是两个头尾。 单链表 这道题目做到吐血。一定要做好注释,不要把1和0都写不对。 #include <iostream> #include <cstring> #include <algorithm> using namespace std
阅读全文
摘要:模拟栈 太ez #include <iostream> #include <cstring> #include <algorithm> #include <vector> using namespace std; int main() { ios::sync_with_stdio(false); c
阅读全文
摘要:模拟队列 清晰明了。 #include <iostream> #include <cstring> #include <algorithm> #include <vector> using namespace std; int main() { ios::sync_with_stdio(false)
阅读全文
摘要:kmp 以前觉得好难,现在感觉好简单。再次梳理一下。 首先构造next数组用来代表前缀重复最大的长度。如果prelen和i的字符相等那么直接next[i]=prelen+1,同时i和prelen递增;如果不相等,prelen是0直接加入0;如果不是0,那么取next[prelen-1]也就是避免重复
阅读全文
摘要:Trie查询与插入 #include <iostream> #include <cstring> #include <algorithm> #include <vector> using namespace std; struct Trie{ int c[26];//孩子 int co;//对应字母
阅读全文
摘要:并查集 用一个索引代表父节点,如果根一样就是一个集合。查找的时候使用路径压缩提升效率。 #include <iostream> #include <cstring> #include <algorithm> #include <vector> using namespace std; int P[1
阅读全文
摘要:堆排序 推荐:https://www.acwing.com/solution/content/120483/ #include <iostream> #include <cstring> #include <algorithm> using namespace std; int A[100100],
阅读全文
摘要:哈希表 我用的拉链法。 #include <iostream> #include <cstring> #include <algorithm> #include <vector> using namespace std; int N = 100003; vector<int> H[100003];
阅读全文
摘要:关于DFS其实本质就是,当path达到对应数量就输出!如果没有达到,那么看看哪些还可以选择,如果可以选择就插入path,标记不可选,然后递归,然后标记可用,然后弹出,就是这么一个套路。 DFS:达则可,否则遍历入标递标出。 BFS:队列不空出遍入。 排列数字 使用回溯法生成所有可能的排列 每次选择一
阅读全文
摘要:1 #include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <climits> using namespace std; //思路就是每次构成一个最短的,下次从最短的下一个开始不断构
阅读全文
摘要:每次遍历所有边权跟上次的比dist,prev+c更新。 n-1之后还可更新有负权回路。 注意prev[a]不可是INF 次数限制的最短路径 #include <iostream> #include <cstring> #include <algorithm> #include <vector> us
阅读全文
摘要:最短路径 把处理的加入队列,下次也是从队列取出来处理,直到队列空了。感觉跟我第一次错迪杰斯特拉一样,但是这个好理解也简单。 漏了两个处理:1是记录已经在队列的就不要入了。2是记录进入队列次数,超过n就是负数。 #include <iostream> #include <cstring> #inclu
阅读全文
摘要:求最短路径 注意一下读取边的时候,最开始都设置为最大,然后读取的时候必须比现在的小才读取,用min就行。注意初始化自己到自己是0。 #include <iostream> #include <cstring> #include <algorithm> #include <vector> using
阅读全文
摘要:最小生成树 #include <iostream> #include <cstring> #include <algorithm> #include <queue> #include <vector> using namespace std; typedef pair<int, int> PII;
阅读全文
摘要:rt 所有的边权录入,然后根据权排序,从小到大构成最小生成树。使用并查集,确保在一个联通的不要再更新。 #include <iostream> #include <cstring> #include <algorithm> #include <vector> using namespace std;
阅读全文
摘要:rt #include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <queue> using namespace std; vector<vector<int>>ev; vector<i
阅读全文
摘要:就是说左边一大堆,右边一大堆。然后呢,做连线,连到最多的就是最大匹配。方法就是,先弄一条匹配,然后加两条不匹配,这样就形成了A-B=C-D其中=是匹配,那么换成A=B-C=D不就是匹配两个了吗,然后继续加线条一直加上,就可以得到最大匹配。在这个具体写法呢,就是便利每一个左边的点,然后每次便利的时候清
阅读全文
摘要:还是要注意自己构建数据测试。 最大连续子序列 前缀和 #include <iostream> #include <algorithm> #include <cstring> #include <vector> using namespace std; int main() { ios::sync_w
阅读全文
摘要:01背包问题 #include<bits/stdc++.h> using namespace std; int main() { int n,v; cin >> n >> v; vector<vector<int>> dp(n+1,vector<int> (v+1,0));//嵌套初始化 vecto
阅读全文
摘要:万里不惜死,一朝得成功 区间选点 #include <iostream> #include <cstring> #include <algorithm> #include <vector> using namespace std; bool compareb(pair<int,int> &a, pa
阅读全文
摘要:数量级和复杂度 全排列好东西 #include <iostream> #include <vector> #include <algorithm> // 使用std命名空间,简化代码书写 using namespace std; int main() { vector<int> nums = {1,
阅读全文
摘要:C++标准库机考高频工具速查:示例与复杂度指南 在机考中,熟练运用C++标准库工具能大幅提升编码效率。本文整理了高频算法函数、数据结构及实用技巧,附简洁示例和复杂度分析,方便快速查阅。 一、核心算法函数(为主) 1. 全排列生成:next_permutation / prev_permutation
阅读全文
摘要:机考高阶算法模板:复杂度与示例用法速查 以下整理了机考中应对中等题和难题的4个核心高阶模板,包含功能、复杂度、示例代码及应用场景,适合开卷考试快速查阅。 一、【I/O外挂】高速读写模板 功能 解决大数据量($10^6$级别)输入输出时的效率问题,避免因cin/cout速度慢导致的TLE(超时)。 复
阅读全文
摘要:机考输入加速2.0(fread版):全类型快读总结 基于fread的快读2.0核心是“全局缓冲区预读+分类型解析”,解决机考中int、long long(LL)、字符串(含/不含空格)的高效读取问题,配合快写可实现输入输出双加速,彻底避免IO超时。以下是完整实现、示例用法及机考注意事项。 一、核心原
阅读全文
浙公网安备 33010602011771号