ACM相关
ACM相关
sweetheart7-7
学习笔记////////多思考~
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ACM必刷知识点
一. 基础部分1. 基础算法排序二分高精度前缀和与差分双指针算法位运算离散化区间合并2. 数据结构链表与邻接表:树与图的存储栈与队列:单调队列、单调栈kmpTrie并查集堆Hash表3. 搜索与图论DFS与BFS树与图的遍历:拓扑排序最短路最小生成树二分图:染色法、匈牙利算法4. 数学知识质数约数欧拉函数快速幂扩展欧几里得算法中国剩余定理高斯消元组合计数容斥原理简单博弈论5. 动态规划背包问题线性DP区间DP计数原创 2021-07-28 21:28:40 · 770 阅读 · 0 评论
-
2021中国大学生程序设计竞赛(CCPC)- 网络选拔赛
1001 - Cut The Wire补题链接xxx是偶数时:x>=n+1x >= n + 1x>=n+1 &&\&\&&& x2<=n\frac{x}{2} <= n2x<=n⇒⇒⇒ n+1<=x<=2nn+1 <= x <= 2nn+1<=x<=2n所以区间大小为 2n−(n+1)+1=n2n - (n + 1) + 1 = n2n−(n+1)+1=n可以确定 2n2n原创 2021-08-29 18:03:35 · 968 阅读 · 0 评论 -
2021牛客暑期多校训练营9 - E(Eyjafjalla)
补题链接: https://ac.nowcoder.com/acm/contest/11260/EAC Code#include <iostream>#include <cstring>using namespace std;const int N = 1e5 + 10;int n, e[N << 1], ne[N << 1], h[N], cnt, tol;void add(int a, int b){ e[cnt] = b原创 2021-08-26 16:22:48 · 349 阅读 · 4 评论 -
【树上倍增】最近公共祖先(LCA)
模版题:https://www.luogu.com.cn/problem/P3379视频讲解1视频讲解2某佬题解思路:设当前节点为 xxx,fa[x][i]fa[x][i]fa[x][i] 代表 xxx 的第 2i2^i2i 个祖先节点,显然 fa[x][0]fa[x][0]fa[x][0] 代表 xxx 的直接父节点,而 fa[x][i]fa[x][i]fa[x][i] = fa[fa[x][i−1]][i−1]fa[fa[x][i-1]][i-1]fa[fa[x][i−1]][i−1]原创 2021-08-25 20:05:56 · 351 阅读 · 2 评论 -
2021“MINIEYE杯”中国大学生算法设计超级联赛(8) - 1004(Counting Stars)
补题链接: https://acm.hdu.edu.cn/showproblem.php?pid=7059考点: 线段树解题思路可参考:https://www.cnblogs.com/lipoicyclic/p/15139116.html但是与下面的代码不同的是: 下面代码考虑的是flag = true 代表[l, r]区间内ai为0,即高位和低位都为0;AC Code#include <iostream>using namespace std;typedef long lon原创 2021-08-24 20:43:08 · 333 阅读 · 0 评论 -
2021“MINIEYE杯”中国大学生算法设计超级联赛(9)- 1003(Dota2)
补题链接:https://acm.hdu.edu.cn/showproblem.php?pid=7068双指针 + 贪心O(n2)(n^2)(n2) 的时间复杂度题解思路可参考:https://www.cnblogs.com/lipoicyclic/p/15154956.htmlAC Code#include<iostream>#include <algorithm>using namespace std;int n, t;typedef pair<in原创 2021-08-18 21:02:24 · 330 阅读 · 0 评论 -
2021牛客暑期多校训练营8 - D(OR)
补题链接:https://ac.nowcoder.com/acm/contest/11259/D作此题需要的前导知识: x+yx + yx+y = x&yx \& yx&y + x∣yx | yx∣y而题中给出: bib_ibi = ai−1∣aia_{i-1}|a_{i}ai−1∣ai, cic_ici = ai−1+aia_{i-1}+a_{i}ai−1+ai所以设 did_idi = ci−bic_i - b_ici−bi = ai−1&aia_原创 2021-08-13 18:13:26 · 324 阅读 · 0 评论 -
2021“MINIEYE杯”中国大学生算法设计超级联赛(8)- 1009(Singing Superstar)
补题链接:https://acm.hdu.edu.cn/showproblem.php?pid=7064板子题:字符串hashcode#include<iostream>#include<algorithm>#include <cstring>#include <unordered_map>using namespace std;// 2^64,让其自然溢出,相当于对2^64取modtypedef unsigned long long U原创 2021-08-13 00:35:37 · 442 阅读 · 0 评论 -
2021“MINIEYE杯”中国大学生算法设计超级联赛(8)- 1006(GCD Game)
补题链接:https://acm.hdu.edu.cn/showproblem.php?pid=7061Nim >^<题解思路可参考: https://www.cnblogs.com/lipoicyclic/p/15133964.htmlcode#include <iostream>using namespace std;const int N = 1e7 + 10;typedef long long ll;bool st[N];int primes[N]原创 2021-08-12 22:16:16 · 371 阅读 · 0 评论 -
2021“MINIEYE杯”中国大学生算法设计超级联赛(8)- 1004(Ink on paper)
补题:https://acm.hdu.edu.cn/showproblem.php?pid=7058每两个点之间连边,构建一个完全图,权值为两点之间的距离,跑一边prim算法,找到最小生成树边中最大的边输出即可!!!code#include <iostream>#include <cstring>using namespace std;typedef long long ll;const int N = 5005;int n, x[N], y[N];bool原创 2021-08-12 21:26:35 · 283 阅读 · 0 评论 -
扩展欧几里得求同余方程组
题目给定x三 mi (mod ai),求一个最小的非负整数 x即x 三 m1 (mod a1)x三 m2 (mod a2)…x三 mk (mod ak)对于线性同余方程组,可以用中国剩余定理来解,但是要求m1,m2,…,mk两两互质所以此题不能用中国剩余定理!先解第1、2个式子a1 * k1 + m1 = xa2 * k2 + m2 = x联立得:a1 * k1 - a2 * k2 = m2 - m1 (1)可以利用exgcd解方程 a1 * k1 - a2 * k2 = gc原创 2021-08-11 15:34:10 · 569 阅读 · 0 评论 -
2021牛客暑期多校训练营4 - J(Average)
补题链接:https://ac.nowcoder.com/acm/contest/11255/J题解可参考此处: https://www.cnblogs.com/lipoicyclic/p/15062880.html浮点数二分 + 前缀和AC code#include<iostream>using namespace std;typedef long long ll;const int N = 1e5 + 10;const double eps = 1e-7;int n原创 2021-08-08 16:50:13 · 317 阅读 · 0 评论 -
2021牛客暑期多校训练营4 - C(LCS)
补题链接:https://ac.nowcoder.com/acm/contest/11255/C题中给出LCS(s1, s2) = a,LCS(s2, s3) = b,LCS(s1, s3) = c;可以将mi = min(a, b, c)长度作为s1, s2, s3的公共部分,然后a -= mi, b -= mi, c -= mi,此时(a, b, c)有一个为0,而要满足构造的字符串的最小长度为此时的 mi + a + b + c,如果n < mi + a + b + c,则不满足条件。对于s原创 2021-08-08 15:44:41 · 309 阅读 · 0 评论 -
2021牛客暑期多校训练营5 - B (Boxes)
可能产生最小花费Ex的两种情况.一. 不使用hint,此时需要将所有打开所有箱子,所以Ex就是所有花费之和.二. 使用hint,刚开始使用hint,此时就知道所有的黑球的数量(cnt),当打开一个箱子后,如果这个箱子里面是黑球,则cnt--,否则cnt不变,如果当前cnt == 剩余的箱子数,则剩下的箱子里面全是黑球,如果cnt == 0,则剩下的箱子里面全为白球,当能根据打开的箱子确定剩下的箱子的球的颜色时,则不需要打开剩余的箱子,此时的花费为打开前m个箱子所要的花费,此时的概率为(剩下的箱子全.原创 2021-08-07 23:19:31 · 366 阅读 · 0 评论 -
2021“MINIEYE杯”中国大学生算法设计超级联赛(1)- 1006(Xor sum)
补题链接:https://acm.hdu.edu.cn/showproblem.php?pid=6955题目:给定T组测试用例,对于每组测试用例有:第一行输入两个数n, k第二行输出n个数组成的序列[a1,a2…an]求满足子序列的值异或和大于等于k的序列,满足条件的序列中长度最小的子序列,输出子序列的左右端点,如果存在多组满足条件的最小子序列,则输出左端点更小的思路:异或运算具有自反性,如果要求每个区间的异或值,我们可以利用前缀异或和的思想,即sum[i] 代表 a[1] ^ a[原创 2021-08-04 23:05:08 · 362 阅读 · 0 评论 -
2021牛客暑期多校训练营6 - F(Hamburger Steak)
https://ac.nowcoder.com/acm/contest/11257/F贪心#include <iostream>using namespace std;typedef long long ll;ll n, m, t[100005];int main(){ scanf("%lld%lld", &n, &m); ll sum = 0, mx = 0, tmax = 0; for (int i = 1; i <= n原创 2021-08-03 20:55:17 · 328 阅读 · 0 评论 -
2021牛客暑期多校训练营5 - K(King of Range)
https://ac.nowcoder.com/acm/contest/11256/K解法1: ST表 + 双指针#include <iostream>using namespace std;int mx[100010][25], mn[100010][25], n, m, a[100010], cc[100010], k;void rmq_init(){ for (int j = 1; (1 << j) <= n; j++) { fo原创 2021-08-01 23:57:35 · 342 阅读 · 0 评论 -
2021 年百度之星·程序设计大赛 - 初赛二
today,百度之星(初赛二)淦了3道,rank 600多,苟进复赛。第一题找规律 + 快速幂,WA四发才过,题目中并没有明确说明输出的结果必须大于零,但是。。。。吐…第二题贪心,先排序,遍历数组,对每个元素加一个值 cc(具体贪心方案见代码),-k <= cc <= k,并加入set,最后输出set的大小即可。第四题,找规律吧,听大佬说此题数据比较弱。。。。剩一个小时的时候开始罚坐。。。。。(太菜了>^<)总体来说,今天体验感极差。。。。服务器崩了n次。。。貌似是某佬在欧原创 2021-08-01 19:15:32 · 960 阅读 · 3 评论 -
2021 年百度之星·程序设计大赛 - 初赛一(1006/毒瘤数据结构题)
原题跳转树状数组记录前 i 项1的个数,当前缀和query(i) == i时,说明前 i 项满足要求,对于op == 1的情况,如果对应位置为0(sum[i] - sum[i - 1] == 0),则改为1,如果本来为1,则不变。对于op == 2的情况,如果对应位置为0,则改为1,查询结果后恢复,(查询利用二分)不知道比赛时能过的思路,现在为啥TLE了...#include <iostream>using namespace std;int n, t, tree[5000原创 2021-07-31 19:56:58 · 828 阅读 · 0 评论 -
2021 年百度之星·程序设计大赛 - 初赛一(1004/萌新)
补题链接跳转a mod c = b mod c c >= 2⇒c * t1 + k = a(1)c * t2 + k = b(2)(1) - (2) ⇒ c(t1 - t2) = (a - b) (此时t可能< 0),为了保证式子两边大于0,所以取绝对值:| c(t1-t2) | = | a - b |ct = abs(a - b); 此时的t > 0可以看出右边是一个常数,设为d ⇒ ct = d,所以当t = 1时,c最大,此时c = d;如果要使c最小,并且大于原创 2021-07-31 19:08:43 · 470 阅读 · 0 评论 -
树状数组求逆序对
代码思路参考#include <iostream>#include <algorithm>using namespace std;struct Node{ int val, pos;} a[100010];bool cmp(Node n1, Node n2){ return n1.val > n2.val;}int b[100010], tree[100010];void add(int x, int v){ while (x原创 2021-07-30 21:33:18 · 134 阅读 · 0 评论 -
2021“MINIEYE杯”中国大学生算法设计超级联赛(3) - 1007(Photoshop Layers)
原题跳转前缀和思想开一个数组pre记录当前位置之前包括(当前位置)距离最近的1的位置开一个sum数组记录从当前位置之前(包括当前位置)距离最近的1的位置到当前位置的前缀和即sum[i] 记录 pre[i] ⇒ i 区间的前缀和求l, r之间的和时, 如果l, r区间有1(即pre[r] >= l), 则输出从最后一个1的位置到r的和,及sum[r]的值如果l, r区间之间没有1(即pre[r] < l),则根据前缀和思想输出:sum[r] - sum[l - 1]的值#includ原创 2021-07-30 16:41:02 · 325 阅读 · 0 评论 -
2021“MINIEYE杯”中国大学生算法设计超级联赛(4)- 1002(Kanade Loves Maze Designing)
原题跳转在std上加了些注释,方便理解#include <iostream>#include <vector>using namespace std;typedef long long ll;const int maxn = 2005;const int N = 2000;const int b = 19560929;const int mod1 = 1000000007;const int mod2 = 1000000009;// n// ans:原创 2021-07-29 21:54:18 · 294 阅读 · 0 评论 -
2021“MINIEYE杯”中国大学生算法设计超级联赛(1)- 1008(Maximal submatrix)
原题跳转题解参考某佬做法#include<iostream>#include<string.h>using namespace std;typedef long long ll;// 原矩阵int arr[2005][2005], n, m;// mx记录当前行,当前列的非递减个数,看下面mx数组求解的代码就可以理解了。。。// s是栈数组// w记录宽度。。。。ll mx[2005], s[2005], w[2005];int main(){原创 2021-07-28 16:24:26 · 449 阅读 · 0 评论 -
2021牛客暑期多校训练营3-B(Black and white)
原题链接过程详解kruskal#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int N = 3e7 + 10;const int M = 5010;struct Node{ int x, y; // x, y坐标 ll v; // 权值 bool operator < (const Node &原创 2021-07-27 10:53:27 · 365 阅读 · 0 评论 -
2021牛客暑期多校训练营3-E(Math)
https://ac.nowcoder.com/acm/contest/11254/E枚举y <= 1000 的情况发现,对于每一个整数x一定有(x, x^3)满足。#include <iostream>int main(){ for (int i = 1; i <= 1000; ++i) { for (int j = i; j <= 1000; ++j) { if((i * i + j * j)%(i * j + 1)原创 2021-07-26 22:08:45 · 355 阅读 · 0 评论 -
2021牛客暑期多校训练营2-K(Stack)
https://ac.nowcoder.com/acm/contest/11253/K详解请参考此处AC代码#include <iostream>using namespace std;int n, k, p, x;int a[1000005], b[1000005], s[1000005];int main(){ scanf("%d%d", &n, &k); for (int i = 0; i < k; ++i) {原创 2021-07-24 10:09:35 · 329 阅读 · 0 评论 -
2021牛客暑期多校训练营1-F(Find 3-friendly Integers)
原题跳转思路:打印前1000项,找规律。发现100项以后全为YES。把前100项提前打表预处理,然后区间在100项的区间部分扫描计数。对于100项以后的区间部分有sum = r - l + 1,打印前1000代码#include <iostream>#include <sstream>#include <string>using namespace std;void toString(string &s, int &num){原创 2021-07-21 21:16:35 · 345 阅读 · 0 评论 -
2021牛客暑期多校训练营1-A(Alice and Bob)
原题链接视频讲解AC代码#include <iostream>using namespace std;// 0代表Bob赢,1代表Alice赢bool dp[5005][5005];// 有点像素数筛的思想int main(){ // dp[0][0]时,先手输,即Bob赢 for (int i = 0; i <= 5000; i++) { for (int j = 0; j <= 5000; j++) {原创 2021-07-21 19:57:16 · 277 阅读 · 0 评论 -
2021牛客暑期多校训练营2-I(Penguins)
https://ac.nowcoder.com/acm/contest/11253/I此题考点为bfs建立一个4维度的vis数组标记当前状态是否访问过用结构题对象保存当前状态和到当前状态的步数和成员数组保存到当前步数所经过的DLRU的操作。对4个操作进行广搜,如果两个企鹅的当前操作都无效,则调过,如果有一个无效,则更新另一个的状态,否则更新两个的状态并加入对列,更新步数,更新当前步数的操作;到达目地后,更新地图并输出。#include <queue>#include <iost原创 2021-07-20 09:05:22 · 461 阅读 · 0 评论
分享