ACM
有关acm算法的文章
Star-tears
一只树懒~
展开
-
第46届EC-Final总结
距离比赛结束过去了两天,想来想去还是写篇小作文吧,毕竟属于我的退役战了(手动狗头doge),顺道来记录一下我的ACM生涯。总体而言我的ACM生涯感觉小有遗憾但是幸运居多,个人心态非常好(毕竟佛系人,一切随缘lalala),即使有遗憾也是能让我更好地记住ACM这段美好的时光吧(一定是这样的(´v`))。在说到这届ecfinal之前,我想先简单地描述一下(好像简单不了emmm…)我目前为止的acm生涯。2020年初识acm来源于我们学校有趣的月考,第一次体会到在oj上写题,过题时的喜悦至今也在刺激着我,看着那些原创 2022-07-22 20:36:42 · 1191 阅读 · 0 评论 -
Codeforces Round #748 (Div. 3) D2. Half of Same(dfs暴力+剪枝)
看没人用dfs,一种不正规做法(逃…#include <bits/stdc++.h>using namespace std;const int maxn = 50;int a[maxn] = {0};int flag, ans2, n;void dfs(int deep, int num, int now, int ans){ if (ans != 0 && ans <= ans2) return; if (deep != n原创 2021-10-16 21:14:19 · 151 阅读 · 0 评论 -
数论基础,从入门到入门
数论基础,从入门到入门文章目录数论基础,从入门到入门一、常用算法1.素数筛法2.线性筛3.快速幂4.矩阵快速幂5.辗转相除法/欧几里得算法6.扩展欧几里得7.中国剩余定理/CRT一、常用算法1.素数筛法2.线性筛大部分只需要判断素数的问题,埃氏筛已经够优秀了但是一部分题需要更大的素数范围或需要快速求一些积性函数的问题,此时需要用到线性筛我们发现埃氏筛在筛的过程中,同一个数字会被筛去很多次,正是这一步限制了它的效率线性筛的优化在于每个数字只会被它的最小素因子筛去,每个数字只会被筛去一次原创 2021-02-03 20:41:53 · 627 阅读 · 0 评论 -
最短路
最短路文章目录最短路一、最短路相关概念二、Floyd三、Dijkstra四、Bellman-Ford一、最短路相关概念二、Floyd我们定义一个数组 dis[k][x][y] ,表示只允许经过结点 V1 到 Vk ,结点 x 到结点 y 的最短路长度。for (k = 1; k <= n; k++) { for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) { dis[i][j] = min(dis原创 2021-01-30 19:43:30 · 172 阅读 · 0 评论 -
2021-02-06
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e4 + 7;int n, deg[N], root;vector<int> G[N];int dep[N], par[N][20];void dfs(int u, int fa) { dep[u] = dep[fa] + 1; par[u][0] = fa; for (int i = 1; i < 2原创 2021-02-06 16:22:59 · 96 阅读 · 2 评论 -
LCA入门
LCA入门文章目录LCA入门一、LCA是什么?二、LCA1.离线tarjan实现2.在线倍增引入实现一、LCA是什么?LCA(Least Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先。在这里,一个节点也可以是它自己的祖先。二、LCA1.离线tarjan实现记录下所有问题的信息和编号。dfs,先找所有询问,答案为另外一个节点在并查集中的根。2.在线倍增引入在有序的区间内找特定的数(二分)从第一个数到到指定位置pos之间的原创 2021-02-04 22:03:13 · 317 阅读 · 0 评论 -
最小生成树入门
最小生成树入门文章目录最小生成树入门一、什么是最小生成树1.是一棵树2.是生成树3.边的权重和最小4.最小生成树定义二、Kruskal算法三、Prim算法具体实现Prim算法和Kruskal算法的区别对比一、什么是最小生成树1.是一棵树无回路n个顶点一定有n-1条边2.是生成树包含全部顶点n-1条边都在图里3.边的权重和最小4.最小生成树定义给定一张边带权的无向联通图G = (V,E), n = |V|,m=|E|。由V中全部顶点和E中n-1条边构成的无向联通子图被称为G原创 2021-01-31 22:57:57 · 425 阅读 · 0 评论 -
背包
背包文章目录背包一、01背包二、完全背包三、多重背包一、01背包1.最优子结构性质:最优解包含了其子问题的最优解,不是合并所有子问题的解,而是找最优的一条解线路,选择部分子最优解来达到最终的最优解。2.子问题重叠性质:先计算子问题的解,再由子问题的解去构造问题的解(由于子问题存在重叠,把子问题解记录下来为下一步使用,这样就直接可以从备忘录中读取)。其中备忘录中先记录初始状态。二、完全背包01背包与完全背包的比较:在0/1背包问题中,第 i 件物品只可以放0个或者1个,即选择或者不选。而在原创 2021-02-02 21:29:16 · 210 阅读 · 0 评论 -
2021-02-01
系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言前言水一篇代码(最小生成树)#include <bits/stdc++.h>using namespace std;const int maxn=110;struct edge{ int u,v,w; bool operator原创 2021-02-01 22:45:42 · 97 阅读 · 0 评论 -
ACM算法入门 Hash
系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、HASH概述哈希冲突字符串Hash字符串Hash树哈希前言补昨日一、HASH概述Hash其实是一种散列技术,散列技术是指在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使每一个关键字都对应一个存储位置。即:存储位置=f(关键字)。这样,在查找的过程中,原创 2021-01-30 16:29:56 · 274 阅读 · 0 评论 -
2021-01-28
#include <bits/stdc++.h>using namespace std;string a,b;int maxl[1001][1001];int main(){ while (cin>>a>>b) { int x,y; x=a.size(); y=b.size(); memset(maxl,0,sizeof(maxl)); for (int i = 1;原创 2021-01-28 21:00:54 · 86 阅读 · 0 评论 -
动态规划算法(DP,Dynamic Programming)
动态规划算法(DP,Dynamic Programming)文章目录动态规划算法(DP,Dynamic Programming)前言一、递归到DP的一般转化方法二、DP解题的一般思路1.将原问题分解为子问题2.*确定状态3. 确定一些初始状态(边界状态)的值4. 确定状态转移方程能用DP解决的问题的特点前言它针对满足特定条件的一类问题,对各状态维度进行分阶段、有顺序、无重复、决策性的遍历求解。一、递归到DP的一般转化方法递归函数有n个参数,就定义一个n维的数组,数组的下标是递归函数参数的原创 2021-01-27 19:00:07 · 644 阅读 · 0 评论 -
ACM算法入门 贪心
贪心算法文章目录贪心算法一、基本思路二、代码一、基本思路1.建立数学模型来描述问题。2.把求解的问题分成若干个子问题。3.对每一子问题求解,得到子问题的局部最优解。4.把子问题的解局部最优解合成原来解问题的一个解。二、代码代码如下(示例):#include <bits/stdc++.h>using namespace std;long long a[2000010];int main(){ int t; scanf("%d",&t);原创 2021-01-26 19:30:32 · 218 阅读 · 0 评论 -
ACM算法入门 线段树
线段树文章目录线段树前言一、什么是线段树二、代码前言难啊……一、什么是线段树线段树,是一种二叉搜索树。它将一段区间划分为若干单位区间,每一个节点都储存着一个区间。它功能强大,支持区间求和,区间最大值,区间修改,单点修改等操作。线段树的思想和分治思想很相像。线段树的每一个节点都储存着一段区间[L…R]的信息,其中叶子节点L=R。它的大致思想是:将一段大区间平均地划分成2个小区间,每一个小区间都再平均分成2个更小区间……以此类推,直到每一个区间的L等于R(这样这个区间仅包含一个节点的信息,原创 2021-01-25 19:52:39 · 142 阅读 · 0 评论 -
2021-01-24
回看前四天代码文章目录回看前四天代码前言代码前言水日记代码#include <bits/stdc++.h>using namespace std;int a[100000];int main(){ int n,k; while(cin>>n,n) { stack<int>s; while(cin>>a[0],a[0]) { for(int i原创 2021-01-24 18:54:40 · 134 阅读 · 0 评论 -
广搜(BFS)和深搜(DFS)
广搜(BFS)和深搜(DFS)文章目录广搜(BFS)和深搜(DFS)一、广搜(BFS)二、深搜(DFS)一、广搜(BFS)#include <bits/stdc++.h>using namespace std;#define pii pair<int,int>const int N=200+10;const int M=10;const int inf=0x3f3f3f3f;char s[N][N];int sx[M],sy[M];int n,m,dis[原创 2021-01-23 19:20:36 · 314 阅读 · 1 评论 -
2021-01-22
二分文章目录二分前言二分1.例题代码前言acm寒假训练第三天,好难QAQ二分1.例题代码POJ3122#include <bits/stdc++.h>using namespace std;#define esp 1e-6#define pi acos(-1.0)double a[100000];int n,m;int check(double mid){ int sum=0; for (int i = 0; i < n; i++)原创 2021-01-22 19:49:41 · 130 阅读 · 0 评论 -
ACM算法入门 并查集
并查集并查集并查集前言一、并查集是什么?二、并查集的使用1.写法2.带权并查集前言acm寒假训练第二天,又是令人愉快的自闭一天!一、并查集是什么?并查集是一种树形结构,又叫“不相交集合”,保持了一组不相交的动态集合,每个集合通过一个代表来识别,代表即集合中的某个成员,通常选择根做这个代表。二、并查集的使用1.写法代码如下(示例):int f[100000];int find(int x){ return f[x]==x?x:f[x]=find(f[x]);}void u原创 2021-01-21 20:20:06 · 164 阅读 · 0 评论 -
基础知识和c++stl库
基础知识和c++stl库基础知识竞赛常用语言—C++时间(空间)复杂度STLSTL:C++标准模板库(Standard Template Library)STL:容器基础知识竞赛常用语言—C++绝大部分情况下用C++(效率高、code速度快),少数情况用Java(有大数)、Python(兼容度不高)输入输出:cin cout万能头文件 #include<bits/stdc++.h>数组尽量放全局数组尽量开大时间(空间)复杂度1.时间复杂度:又称时间复杂性,用来描述程序运行原创 2021-01-20 20:25:53 · 501 阅读 · 0 评论