02 2024 档案
摘要:AcWing-900 思路: 转换成完全背包问题 时间复杂度: o(n^3) AC代码: #include <iostream> #include <algorithm> using namespace std; const int N=1010,mod=1e9+7; int n; int f[N]
阅读全文
摘要:p2758-编辑距离 思路: 用f[i][j]表示第一个字符串的前 i 个字母变为第二个字符串的前 j 个字母所用的最少操作次数。 假设第一个字符串为:AGTCTGACGC 第二个字符串为:AGTAAGTAGGC f[3][5] 表示把第一个字符串的前三个字母变为第二个字符串的前五个字母所需要的最少
阅读全文
摘要:适用于多源汇求最短路的问题 原理: 基于动态规划 AcWing-854 AC code: #include <iostream> #include <algorithm> #include <cstring> using namespace std; const int N=510,INF=1e9;
阅读全文
摘要:A 时间复杂度: O(n) AC代码: #include <iostream> using namespace std; int n,cnt; int a[110]; bool is_isprime(int x) { if(x<2) return false; for(int i=2;i<=x/i;
阅读全文
摘要:A 思路: 分解质因数当指数为1并且cnt==3时满足条件 时间复杂度: o(n) AC代码: #include <iostream> using namespace std; int l,r,cnt; bool k; int c[100]; void divide(int n) { int t=n
阅读全文
摘要:A 思路: 签到题 AC代码: #include <bits/stdc++.h> using namespace std; int a,b,k; int main() { cin>>a>>b>>k; if(a>=k*b) cout<<"good"<<endl; else cout<<"bad"<<e
阅读全文
摘要:一.存储 树是特殊的图 无向图是特殊的有向图 所以只需考虑有向图如何存储即可 1.邻接矩阵 空间复杂度o(n^2)-用的不多 2.邻接表(每一个节点都开一个单链表-存这个点可以走到哪个点) 注:内部点顺序无关紧要 二.遍历 (1)深度优先遍历DFS AcWing-846 #include <iost
阅读全文
摘要:朴素版-适用于稠密图 思路: 集合S为已经确定最短路径的点集。 初始化距离 一号结点的距离为零,其他结点的距离设为无穷大(看具体的题)。 循环n次,每一次将集合S之外距离最短X的点加入到S中去(这里的距离最短指的是距离1号点最近。点X的路径一定最短,基于贪心,严格证明待看)。然后用点X更新X邻接点的
阅读全文
摘要:拓扑序列概念: 若一个由图中所有点构成的序列 A满足:对于图中的每条边 (x,y),x 在 A中都出现在 y之前,则称 A 是该图的一个拓扑序列。 有向无环图才有拓扑序列 AcWing-848 #include <cstring> #include <iostream> #include <algo
阅读全文
摘要:1.数组模拟堆 作用: 修改任意一个元素: heap[k]=x; down(k); up(k); 求集合中的最小值: heap[1]; 插入一个数: heap[++size]; 删任意一个元素: heap[k]=heap[size]; size--; down(k); up(k); 删最小值: he
阅读全文
摘要:作用: 1.将两个集合合并 2.询问两个元素是否在一个集合当中 基本原理: 每个集合用一棵树来表示,树根的编号就是整个集合的编号。每个节点存储它的父节点,p[x]表示x的父节点 操作: 1.判断树根: if(p[x]==x); 2.求x的集合编号: while(p[x]!=x) x=p[x]; 3.
阅读全文
摘要:#include <iostream> using namespace std; const int N=100010; int son[N][26];//第一维表示父亲的位置,第二维存儿子的名字 表示儿子的位置 int cnt[N];//所有串以该点结尾的个数 int idx;//当前用到哪个下标
阅读全文
摘要:质数 1.定义: 在大于1的整数中,只包含1和本身这两个约数的数称为质数或者叫素数.而合数是指在大于1的整数中除了能被1和本身整除外,还能被其他数(0除外)整除的数(1既不是质数也不是合数,质数和合数是针对所有大于1的 “自然数” 来定义的) 2.质数判定 (1)试除法: AcWing-866 思路
阅读全文
摘要:A 思路: 直接遍历字符串s,判断是否依次出现过dfs和DFS 时间复杂度: O(∑n) #include <bits/stdc++.h> using namespace std; int t,n; string a; int main() { cin>>t; while(t--) { int s1
阅读全文
摘要:特点:先进后出 1.数组模拟栈 AcWing-828 #include <iostream> #include <stack> using namespace std; const int N=1e5+10; int m; int stk[N]; int tt;//栈顶下标 void push(in
阅读全文
摘要:特点:先进先出 数组模拟队列 #include <iostream> #include <stack> using namespace std; const int N=1e5+10; int m; int q[N]; int tt=-1;//对尾下标 int hh;//队头下标 void push
阅读全文
摘要:P2678 跳石头 1.思路: 首先我们二分跳跃距离,然后把这个跳跃距离“认为”是最短的跳跃距离,然后去以这个距离为标准移石头。判断这个解是不是可行解。check函数去判断如果以这个距离为最短跳跃距离需要移走多少块石头,先不必考虑限制移走多少块,等全部拿完再把拿走的数量和限制进行比对,如果超出限制,
阅读全文
摘要:1.单链表 作用:存储树和图。 思路:数组模拟链表,又称静态链表。 优点:速度快 动态链表慢的原因是每次都要new在堆区申请空间 AcWing-826 代码: #include <iostream> using namespace std; const int N=1e5+10; int head;
阅读全文