首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Gorit 带你学全栈系列

    算法竞赛(一)

    算法竞赛的目的是找到解决问题的答案,不是比谁的答案更高级!!! - b; 方法三 a=a^b; b=a^b; a=a^b; 方法四 int t; t = a; a = b; b = t; */  这个交换数据的题目还有两种,一种使用指针,还有是用函数,在算法竞赛

    44610编辑于 2021-12-09
  • 来自专栏Gorit 带你学全栈系列

    算法竞赛(二)

    return 0; } 三、3n + 1 问题 问题描述:对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半,经过若干次这样的变换,一定会使n变为1,例如3—>10—>5

    55520编辑于 2021-12-09
  • 来自专栏机器学习/数据可视化

    机器学习算法竞赛实战-竞赛问题建模

    机器学习算法竞赛实战-竞赛问题建模 更新《机器学习算法竞赛实战》一书的阅读笔记,更多详细的内容请阅读原书。 本文的主要内容包含: 竞赛问题建模 针对具体问题的建模分为3个部分: 赛题理解 样本选择 线下评估策略 赛题理解 业务背景:深入业务、明确目标 数据理解:数据基础层、数据描述层;前者关注:字段来源、取数逻辑 准确方法 解决数据集过大或者正负样本不均衡的方法: 简单随机抽样:有放回和无放回 分层采样:评分加权处理(对不同的类别进行加权)、欠采样(随机欠采样、Tomek Links)、过采样(随机过采样、SMOTE算法 2,2折交叉验证:将数据分为训练集和测试集,受数据划分方式影响大 K=N,N折交叉验证(留一验证 leave-one-out Validation),N-1个训练集,1个测试集;训练过程计算量大 K=5或者 10,折中办法:比如K=5表示取其中4份作为训练集,1份作为验证集,循环5次,取5次训练的评价结果的均值或者投票表决 # 10折交叉验证 from sklearn.model_selection import

    42520编辑于 2023-08-25
  • 来自专栏ACM算法竞赛——模板

    ACM算法竞赛——spfa 算法(模板)

    SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环。SPFA 最坏情况下复杂度和朴素 Bellman-Ford 相同,为 O(VE)。 (百度百科) 这也是为什么在算法竞赛中我们很少使用bellman-ford算法的原因 SPFA 一般:O(m) 线性 最坏:O(nm) int n; // 总点数 int h[N], w[N]

    60630编辑于 2022-05-18
  • 来自专栏Livinfly

    算法竞赛 - 搜索】 Solitaire

    (面向数据是把每个状态的最大步数设为5可过) 最后还没搜出答案,再扩展未空的队列。 棋子位置排序 题目似乎没有明确说明棋子位置是否一一对应。

    35310编辑于 2022-10-26
  • 来自专栏Livinfly

    算法竞赛】错误&技巧

    邻接表,h[]忘记初始化。多组数据时,idx未初始化(会造成数组越界) 当使用并查集时,注意自己写的并查集是不是fa[x]随时都是x的祖宗,若不是,记得要用GetFa(x) 变量名有冲突y1, next, prev, has ... 在特别情况下.size()和int整型变量比较时会出错,所以尽量保证式子的运算结果是正数,因为如果是负数,unsigned int类型的变量会变成超大的正数。 priority_queue 默认是大根堆 < Type,vector,greater >是小根堆 图论采用虚拟源点时

    64830编辑于 2023-01-10
  • 来自专栏ACM算法竞赛——模板

    ACM算法竞赛——Kruskal算法(模板)

    克鲁斯卡尔算法是求连通网的最小生成树的另一种方法。与普里姆算法不同,它的时间复杂度为O(eloge)(e为网中的边数),所以,适合于求边稀疏的网的最小生成树 。

    61130编辑于 2022-05-18
  • 模拟算法竞赛必备)

    一、引言: 模拟算法,简单来说,就是按照题目描述的步骤或规则,一步一步地用代码实现解决问题的过程。就像是你在玩一个游戏,游戏有它自己的规则,而你需要根据这些规则来做出相应的动作以完成特定的目标。 笔者提醒: 模拟这个算法其实非常难,主要是逻辑上的麻烦,但正常刷题时我们都不把模拟的逻辑思维理清就直接做,如果这题没有太水的话,是非常容易错的。 模拟可以与任何算法同时出现,比如模拟与动归dp、模拟与搜索之类的。 而接下来的入门题型,就是“水题”!基础与进阶代码量会大一些。 但这没啥好担心的,这毕竟是算法能力提升的基石-敲代码能力( ̄︶ ̄)↗ 。 三、练习: 模拟类型、是以编程题考察。 (算法详解+例题) 3、C++算法:模拟 ( •̀ ω •́ )✧点击这里,继续学习其他模块吧!

    55000编辑于 2025-10-22
  • 枚举算法竞赛必备)

    常量n }; 但在算法竞赛中的 “枚举”,可不止这么简单。重点:算法中的枚举,是一种思想,而不是一种语法结构! ( •̀ ω •́ )y 二、枚举算法基础 核心思想:将所有可能罗列出来,逐一检验每个解,是否符合条件。 输入输出样例 示例 1 输入 5 3 6 2 7 2 5 3 5 4 0 4 0 6 输出 3 Java版 import java.util.Scanner; public class 不高兴的津津 前几个质数是:2,3,5,7,11,13,17,19,23,29,31,37,⋅⋅⋅2,3,5,7,11,13,17,19,23,29,31,37,⋅⋅⋅ 。 例如:2,3,5,7,23,372,3,5,7,23,37 都是纯质数,而 11,13,17,19,29,3111,13,17,19,29,31 不是纯质数。

    73400编辑于 2025-10-22
  • 来自专栏ACM算法竞赛——模板

    ACM算法竞赛——floyd算法(模板)

    Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。 该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。 (百度百科) Floyd算法用于求多源汇最短路问题,通俗来讲就是求图中任意两点间的最短距离 时间复杂度: O(n^3) 初始化: for (int i = 1; i <= n; i ++ ) (int j = 1; j <= n; j ++ ) if (i == j) d[i][j] = 0; else d[i][j] = INF; // 算法结束后

    46930编辑于 2022-05-18
  • 来自专栏ACM算法竞赛——模板

    ACM算法竞赛——匈牙利算法(模板)

    匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法,并推动了后来的原始对偶方法。 (百度百科) 匈牙利算法用于求二分图的最大匹配问题 时间复杂度:O(mn),实际运行时间一般小于O(mn) int n1, n2; // n1表示第一个集合中的点数,n2表示第二个集合中的点数 int h[N], e[M], ne[M], idx; // 邻接表存储所有边,匈牙利算法中只会用到从第一个集合指向第二个集合的边,所以这里只用存一个方向的边 int match[N];

    59530编辑于 2022-05-18
  • 来自专栏OI算法学习笔记

    NOI算法竞赛大纲

    向上的箭头代表提高阶段需掌握的算法。 奖杯代表NOI级 Q.E.D.

    88510编辑于 2022-08-31
  • 来自专栏ACM算法竞赛——模板

    ACM算法竞赛——朴素dijkstra算法(模板)

    int g[N][N]; // 存储每条边 int dist[N]; // 存储1号点到每个点的最短距离 bool st[N]; // 存储每个点的最短路是否已经确定 // 求1号点到n号点的最短路,如果不存在则返回-1 int dijkstra() { memset(dist, 0x3f, sizeof dist); dist[1] = 0; for (int i = 0; i < n - 1; i ++ ) { int t = -1;

    61230编辑于 2022-05-16
  • 来自专栏ACM算法竞赛——模板

    ACM算法竞赛——双指针算法(模板)

    for (int i = 0, j = 0; i < n; i ++ ) { while (j < i && check(i, j)) j ++ ; // 具体问题的逻辑 } 常见问题分类: (1) 对于一个序列,用两个指针维护一段区间 (2) 对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作

    38440编辑于 2022-05-14
  • 算法竞赛偷分技巧

    5)在使用空间时,一定要留出 10M 左右的空闲空间,不要将允许空间挤满,在大内 存程序调试时可以使用工具查看内存实际占用情况,不要铤而走险打“擦边球”。 (1)将二维带参变量的数组用结构体一维数组代替 (2)使用滚动数组,将无用的空间及时释放 (3)高精度运算尽量在原数基础上运算 (4)搜索时在原来状态基础上修改,少引入中间状态、临时状态 (5)队列使用循环队列 (4)注意缩进,层次清晰 (5)对于复杂的分类问题,将各种类别表示在数组中,使用循环进行统一判断,而不 是分别判断处理。 (3)将一些成型的、经典的算法在考前练习熟练,考试时直接用函数写出来,不需要 再多考虑、调试。包括排序、并查集、基本数学算法等,在本文“应该学习的内 容”中有所介绍。

    29610编辑于 2024-06-19
  • 来自专栏Livinfly

    算法竞赛 - 搜索】Black And White

    ; srand(time(0)); cout << 5000 << endl; for (int T = 0; T < 5000; T++) { int n = random(5) + 1, m = random(5) + 1; sum = n * m; k = random(sum) + 1; cout << n << ' ' << m << ' ' <

    40020编辑于 2022-10-26
  • 来自专栏Livinfly

    算法竞赛 - 搜索】Eight II

    5040, 40320, 362880}; int ans_step; LL ans; // 路径的数字形式 LL power4[40]; // 35 char ans_path[40], dir[5] include <cstring> #include <queue> #include <unordered_map> using namespace std; string ans; char ch[5]

    33430编辑于 2022-10-26
  • 来自专栏Gorit 带你学全栈系列

    算法竞赛习题整理(一)

    保留三位小数(c = 5(f-32)/9) 样例输入: 98 样例输出: 36.667 源码 #include int main() { float f,c; scanf("%f",&f); c = 5*(f - 32)/9; printf("%.3f",c); return 0; } 三、求和 问题描述:输入正整数n,求1+2+3+4+5+***+n 的值,只要能 算出来结果的就是好算法 三角形 问题描述:输入三角形三条边的长度值(均为正整数),判断是否能为直角三角形的三个边长,则输出yes,如果不能输出no,如果根本无法构成三角形,输出not a triangle 样例输入: 3 4 5

    44310编辑于 2021-12-09
  • 来自专栏Livinfly

    算法竞赛 - 搜索】DNA sequence

    cstring> using namespace std; typedef long long LL; int n, depth; int len[12], idx[12]; char DNA[5]

    30920编辑于 2022-10-26
  • 来自专栏Livinfly

    算法竞赛 - 搜索】八数码

    题目跳转 POJ1077 Eight 题目大意 经典八数码问题,无需赘述。 本人思路 BFS - 康托展开 - A* 上下左右移动的操作直接自己想好二维的形态,直接在一维中实现 将每个没有在自己位置的棋子与自己的应在的位置的曼哈顿距离之和作为估价函数f 康托展开进行哈希 我的其他思路: 用map代替康托展开来哈希 不加A* TLE 加了A* 比康托展开慢 康托展开的复杂度为O(n^2),而map的时间复杂度为O(nlogn),但是不难发现,用map实现时,会多次调用map中时间复杂度为O(logn)的函数

    54420编辑于 2022-10-26
领券