首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Livinfly

    算法竞赛】CF #817(Div.4) A-G Rethink

    然后,我们同样可以发现,连续的1~n(n为偶数),在n为4的倍数的时候,我们发现奇数的0号为,异或和结果为0。 我们稍加思索,试着把这些奇数都减1,发现是0~n-2的偶数。 当 n%4 == 0,答案为0~n-1的序列。 同时,因为0的加入对异或和没有影响,我们顺势得出, 当 n%4 == 3时,答案为1~n的序列。 我们再顺着考虑 n%4==1的情况。 因为前面得出 n%4 == 0的情况,我们不妨从这个情况出发,看看能不能加一个数,使得它成立。 当 n%4 == 1时,答案为0, 2~n的序列。 再考虑 n%4 == 2的情况。 flag = false; auto check = [&](int x, int y) { set<PII> s; for (int i = 0; i < 4;

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

    算法竞赛(一)

    算法竞赛的目的是找到解决问题的答案,不是比谁的答案更高级!!! - b; 方法三 a=a^b; b=a^b; a=a^b; 方法四 int t; t = a; a = b; b = t; */  这个交换数据的题目还有两种,一种使用指针,还有是用函数,在算法竞赛中 ,输出鸡的数目,兔的数目 示例 样例输入 14 32 样例输出 12 2 样例输入 10 16 样例输出 No answer 问题思考:我们假设鸡有 a 只,兔有 b 只,a + b = n,2a+4b a和b都是整数并且大于0,还有兔和鸡的腿数都为偶数,所以m也一定为偶数 #include int main() { int a,b,n,m; scanf("%d%d",&n,&m); a = (4*

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

    算法竞赛(二)

    } 三、3n + 1 问题 问题描述:对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半,经过若干次这样的变换,一定会使n变为1,例如3—>10—>5—>16—>8—>4— +4! * * * n!的末六位(不含前导0,只保留后六位数字)。

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

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

    机器学习算法竞赛实战-竞赛问题建模 更新《机器学习算法竞赛实战》一书的阅读笔记,更多详细的内容请阅读原书。 本文的主要内容包含: 竞赛问题建模 针对具体问题的建模分为3个部分: 赛题理解 样本选择 线下评估策略 赛题理解 业务背景:深入业务、明确目标 数据理解:数据基础层、数据描述层;前者关注:字段来源、取数逻辑 查全率)、F1_score、ROC曲线、AUC和对数损失(logloss) 回归模型:平均绝对误差MAE、均方误差MSE、均方根误差RMSE、平均百分比误差MAPE 样本选择 主要原因 影响数据质量的4个原因 准确方法 解决数据集过大或者正负样本不均衡的方法: 简单随机抽样:有放回和无放回 分层采样:评分加权处理(对不同的类别进行加权)、欠采样(随机欠采样、Tomek Links)、过采样(随机过采样、SMOTE算法 : train.isnull().sum() # 缺失值情况 Out[4]: Id 0 MSSubClass 0 MSZoning 0

    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

    <queue> #include <map> using namespace std; typedef pair<int, int> PII; struct Node { PII p[4] ; int s = 0; int toint() { int t = 0; for (int i = 0; i < 4; i++) bool operator<(const Node &a, const Node &b) { return a.s < b.s; } } st[2]; int dxy[4] << "used_posxxxx\n"; // cout << p.first << ' ' << p.second << endl; for (int i = 0; i < 4; int, int> &mp1, map<int, int> &mp2) { Node t = q.front(); q.pop(); for (int i = 0; i < 4;

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

    算法竞赛】错误&技巧

    线段树要开4倍N 二分注意二分的数值的大小可能要开LL, mid同理 dfs or ... if 先判断数组的下标会不会越界再判数组的值 字符串不要memset &的优先级比==高 尽量不要相似的代码复制粘贴

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

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

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

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

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

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

    常量n }; 但在算法竞赛中的 “枚举”,可不止这么简单。重点:算法中的枚举,是一种思想,而不是一种语法结构! ( •̀ ω •́ )y 二、枚举算法基础 核心思想:将所有可能罗列出来,逐一检验每个解,是否符合条件。 样例输入1 3 4 0011 4 1100 4 1010 样例输出1 3 3 2 说明 样例 11:考虑字符串 X=1110X=1110,其中 X2=X1⊕S1=1⊕0,X3=X2⊕S2=1⊕0,X4= 如果不会不高兴则输出 00,如果会则输出最不高兴的是周几(用 1,2,3,4,5,6,71,2,3,4,5,6,7 分别表示周一,周二,周三,周四,周五,周六,周日)。 当然 1,4,351,4,35 也不是纯质数。 请问,在 11 到 2021060520210605 中,有多少个纯质数?

    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
  • 算法竞赛偷分技巧

    [300]={0}; //注意变量赋初值,除非循环变量、临时变量,尽量赋为零 l=strlen(c); //将多次用到的表达式、函数存在变量中,避免重复计算 if(tt==l) //首先解决“平凡问题44M,通常空间限制为 64M 时,最多开 15 个这样的 数组。 (4)一个 int a1000的二维数组同样占 4M。一个 int a2000的二维数组占 16M,最多开 3 个。二维数组最多允许 30003000 的规模,且只有一个。 (4)注意缩进,层次清晰 (5)对于复杂的分类问题,将各种类别表示在数组中,使用循环进行统一判断,而不 是分别判断处理。 (3)将一些成型的、经典的算法在考前练习熟练,考试时直接用函数写出来,不需要 再多考虑、调试。包括排序、并查集、基本数学算法等,在本文“应该学习的内 容”中有所介绍。

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

    算法竞赛 - 搜索】Black And White

    > #include <cmath> #include <cstring> using namespace std; const int N = 6; int n, m, k; int dxy[4] int g[N][N], ans[N][N], color_cnt[30]; bool flag; bool check(int x, int y) { for (int i = 0; i < 4; type]++; return true; } // 也可以改成从左上搜到右下,即a = x,b = y+1; a += b/m,b %= m; for (int i = 0; i < 4;

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

    算法竞赛 - 搜索】Eight II

    362890]; // dist 1代表正序,0代表倒叙,下同 LL road[2][362890]; // 存储字典序最小的路径 queue<Node> q; void prev_calc() // 预处理4的 for (int i = 0; i < 35; i++, t *= 4) power4[i] = t; } void init() // 初始化 { while (q.size()) + type; else nt.path = (3 - type) * power4[nt.step - 1] + nt.path; road[nt.is_ordered][ d[0][nt.hx]] + road[0][nt.hx]; else tans = road[1][nt.hx] * power4[d[0][nt.hx]] + nt.path; i]) % 4LL]; ans_path[ans_step] = '\0'; // 重置,不然会使得上次对char*的更改对下次输出有影响。

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

    算法竞赛习题整理(一)

    f,c; scanf("%f",&f); c = 5*(f - 32)/9; printf("%.3f",c); return 0; } 三、求和 问题描述:输入正整数n,求1+2+3+4+ 5+***+n 的值,只要能 算出来结果的就是好算法 样例输入: 100 样例输出: 5050 源代码: #include int main() { int n; scanf("%d",&n); pi));//化成弧度计算 return 0; } 五、打折 问题描述:一件衣服85元,若消费满300元,可以打85折, 输入购买衣服的件数,输出需要支付的金额,结果保留两位小数 样例输入 4 三角形 问题描述:输入三角形三条边的长度值(均为正整数),判断是否能为直角三角形的三个边长,则输出yes,如果不能输出no,如果根本无法构成三角形,输出not a triangle 样例输入: 3 4 样例输出: yes 样例输入: 2002 样例输出: no 源码: #include int main() { int n; scanf("%d",&n); if(n% 400 == 0||(n%4

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

    算法竞赛 - 搜索】DNA sequence

    <= n; i++) // cout << idx[i] << ' ' << len[i] << endl; // cout << endl; for (int i = 0; i < 4;

    30920编辑于 2022-10-26
领券