算法模板(持续更新)
基础算法
高精度加法
1234567891011121314151617vector<int> add(vector<int> a, vector<int> b) //倒进倒出{ vector<int> c; int t = 0; for (int i = 0; i < a.size() || i < b.size(); i++) { if (i < a.size()) t += a[i]; if (i < b.size()) t += b[i]; c.push_back(t % 10); t /= 10; } if (t) c.push_back(t); while (c.size() > 1 && !c.back()) c.pop_back(); return c;}
高精度减法
123456789101112131415161718192 ...
信阳师范大学算法工作室招新中~
你是否想在大学发现一个更精彩的新世界?
你是否对自己的天赋充满信心?(尤其是逻辑能力或数学思维)
你是否想体验最极致的编程乐趣?
你是否想找一群志同道合的朋友一起奋斗?
那么,来加入XYNU的算法工作室吧!
——————————————————————————————————
什么是ACM?
ACM 全称 ACM-ICPC,原本专指国际大学生程序设计竞赛(International Collegiate Programming Contest)。
由国际计算机学会(Association for Computing Machinery,简称 ACM )赞助与冠名。虽然从 2018 年起 ICPC 从 ACM 名下独立出来,但还是延续传统继续称之为 ACM 竞赛。
比赛赛制为 5 小时内三人一队利用一台计算机编程解决算法问题。其余类似赛制的比赛也常用 ACM 指代,泛指种种大学生算法竞赛。
进入工作室后能干什么?
我们关注的算法竞赛主要包括:
国际大学生程序设计竞赛(ICPC)
中国大学生程序设计竞赛(CCPC)
蓝桥杯程序设计竞赛
团体程序设计天梯赛
注:ICPC 和 CCPC ...
牛客周赛 Round 75 题解
A. 小红的正整数计数
签到
code:
12345678910111213141516171819#include <bits/stdc++.h>using namespace std;int l, r;int main(){ cin >> l >> r; int res = 0; for (int i = l; i <= r; i++) if (i % 2 == 0) res++; cout << res << endl; return 0;}
B. 小红的双生串
分别统计前半段和后半段出现最多的字符,再把整个字符串修改成只有这两个字符。
code:
12345678910111213141516171819202122232425#include <bits/stdc++.h>using namespace std;string s;int main(){ cin >> ...
Codeforces Round 996 (Div. 2) 题解
A. Two Frogs
当两个青蛙之间的距离为 \(1\) 时,此时先跳的青蛙最终会被逼到角落。
不难发现,两个青蛙跳跃的次数相同时,它们之间距离的奇偶性是不变的。因此,若两青蛙初始距离为奇数,则它们距离为 \(1\) 时 \(Alice\) 先跳。若两青蛙初始距离为偶数,此时 \(Alice\),先跳一次,情况转变成 \(Bob\) 先手,并且它们之间的距离为奇数,所以当距离为 \(1\),时,\(Bob\) 先跳。
code:
123456789101112131415161718192021222324252627282930313233#include <bits/stdc++.h>#define int long long#define x first#define y second#define endl '\n'using namespace std;typedef pair<int, int> PII;const int N = 200010;int T;int n, a, b;signed main(){ ...
牛客周赛 Round 76 题解
A. 小红出题
签到
code:
12345678910111213141516171819#include <bits/stdc++.h>using namespace std;int n;int main(){ cin >> n; int res = 0; for (int i = 1; i <= n; i++) if (i % 7 != 6 && i % 7) res += 3; cout << res << endl; return 0;}
B. 串串香
一个字符串中出现次数最多的子串长度一定是 \(1\),因此只需要统计出现次数最多的字符即可。
code:
123456789101112131415161718192021222324#include <bits/stdc++.h>using namespace std;int n;string s;int main(){ ...
AtCoder Beginner Contest 388 题解
A. ?UPC
签到
code:
1234567891011121314#include <bits/stdc++.h>using namespace std;string s;int main(){ cin >> s; cout << s[0] << "UPC" << endl; return 0;}
B. Heavy Snake
暴力枚举
code:
1234567891011121314151617181920212223#include <bits/stdc++.h>using namespace std;const int N = 110;int n, d;int t[N], l[N];int main(){ cin >> n >> d; for (int i = 0; i < n; i++) cin >> t[i] >> l[i]; for (int i = 1; ...
Educational Codeforces Round 171 (Rated for Div. 2) 题解
A. Perpendicular Segments
不难发现, \(A,B,C,D\) 可以当作正方形的四个顶点,\(len(AB)=len(CD)=\) 正方形对角线长度,因此只要在给定区间找到最大正方形即可。
code:
1234567891011121314151617181920212223242526272829303132333435#include <bits/stdc++.h>#define x first#define y second#define int long long#define endl '\n'using namespace std;typedef pair<int, int> PII;const int N = 200010;int T;int x, y, k;void solve(){ cin >> x >> y >> k; int d = min(x, y); cout << "0 0 " << ...
牛客周赛 Round 67 题解
A. 排序危机
签到
code:
12345678910111213141516171819202122#include <bits/stdc++.h>using namespace std;int n;string s, a, b, c;int main(){ cin >> n >> s; for (int i = 0; i < n; i++) { if (s[i] >= 'a' && s[i] <= 'z') a += s[i]; else if (s[i] >= '0' && s[i] <= '9') b += s[i]; else c += s[i]; } cout << a << b << c; return 0;}
B. 小 ...
牛客周赛 Round 66 题解
A. 小苯吃糖果
签到
code:
12345678910111213141516#include <bits/stdc++.h>using namespace std;int a[3];int main(){ cin >> a[0] >> a[1] >> a[2]; sort(a, a + 3); cout << max(a[0] + a[1], a[2]); return 0;}
B. 小苯的排列构造
构造一个 \(n\) 到 \(1\) 的排列即可
code:
1234567891011121314151617181920#include <bits/stdc++.h>using namespace std;int T;int n;int main(){ cin >> T; while (T--) { cin >> n; for (int ...
算法入门
语言基础
最适合竞赛的语言:\(C\)++
主要原因:
强大的标准库:\(C\)++ 提供了一个非常强大的标准模板库 \((STL)\),其中包括高效的数据结构(如 \(vector、map、set\) 等)和算法(如排序、搜索、二分查找等)。这些工具可以帮助参赛者快速实现复杂算法,减少编写底层代码的时间。
高效的执行速度:\(C\)++ 是一种编译型语言,其执行速度接近底层语言(如 \(C\) 和汇编),因此在执行时间上比解释型语言(如 \(Python\) 和 \(JavaScript\))有优势。对于很多竞赛题目,时间效率是关键,\(C\)++ 的高效性能使其特别适合处理大规模数据。
广泛的使用与支持:\(C\)++ 是绝大多数算法竞赛支持的主流语言,并且在竞赛社区中非常流行。大量的参考代码、学习资源和讨论也是用 \(C\)++ 实现的。
时空复杂度分析
在竞赛中,对于所有题目,都会限制程序的运行时间与空间。
因此,我们要对每道题进行时空复杂度分析。
时间复杂度:
时间复杂度衡量的是算法在输入规模 \(n\) 增加时,所需的操作次数增长的快慢。
\(C\)++ 每秒的运行速度 ...