随笔分类 -  ACM

摘要:经典例题:石子合并 题目链接 N 堆石子排成一行,现要将石子有次序地合并成一堆,规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。计算合并最小得分。 方法一、区间dp #include<bits/stdc++.h> using namespace std; const 阅读全文
posted @ 2023-02-20 20:13 风归去 阅读(40) 评论(0) 推荐(0) 编辑
摘要:1、含义 迭代加深搜索是一种每次限制搜索深度的深度优先搜索。 2、例题 整数变换问题 刚开始看到最少变换次数,果断选择BFS,结果MLE。 Q1:为什么使用BFS会爆内存? ①搜索树过深或者过宽;②BFS的实现基础是队列,队列的空间复杂度很大。 Q2:有何替代解决方法? ①时间换空间:使用迭代加深搜 阅读全文
posted @ 2023-02-20 19:18 风归去 阅读(135) 评论(0) 推荐(0) 编辑
摘要:1、异或 相同的数,异或结果为0,不同的数,异或结果为1.异或会用在nim博弈和一些数学中。可以找出n+1个数中,唯一一个与其他的数不同的数 异或有个性质:一个数对另一个数异或两次,数值不变。 性质应用:交换两个数 x = x ^ y; //x = 3 ^ 4 y = x ^ y; //y = 3 阅读全文
posted @ 2023-02-05 10:19 风归去 阅读(81) 评论(0) 推荐(0) 编辑
摘要:1、fabs返回浮点数的绝对值,abs返回整数绝对值 2、运算符重载之后排序比写一个排序函数排序要快 struct node{ int x, y, z; bool operator < (const node &p) const{ return z < p.z; } }a[N]; 3、registe 阅读全文
posted @ 2023-02-05 10:18 风归去 阅读(200) 评论(0) 推荐(0) 编辑
摘要:1、Magic Problem - 7176 (hdu.edu.cn) 思路:求的是区间总和,所以考虑和前缀和进行结合,将前缀和a[i](前i个数的前缀和)作为边权。然后考虑限制条件。 首先,区间[l,r]的总和小于b,那么可以得到a[r] - a[l - 1] ≤ b 其次,因为每个位置大于等于0 阅读全文
posted @ 2023-02-05 10:16 风归去 阅读(28) 评论(0) 推荐(0) 编辑
摘要:1、Bomb Problem - 5934 (hdu.edu.cn) 题意:二维平面图上,给一些炸弹的坐标(x, y)和炸弹可以引爆的范围圆的半径和引爆该炸弹的花费。问最少花费是多少可以把所有炸弹引爆? 考点:强连通分量 思路:利用tarjan算法进行染色。对每个强连通分量求取一个花费最小值,然后将 阅读全文
posted @ 2023-02-05 10:13 风归去 阅读(83) 评论(0) 推荐(0) 编辑
摘要:一、kmp算法 1、基本概念 模式串:P 匹配串:T kmp算法精髓:找打一个最大的x,使得T[s+1,...,s+k]的后x个字符,和P的前x个字符相同。 2、next数组 next数组:记录模式串最长公共前后缀 3、相关代码 //求next数组伪代码 next[1] = 0 k = 0 for 阅读全文
posted @ 2022-11-25 11:06 风归去 阅读(74) 评论(0) 推荐(0) 编辑
摘要:一、字符串相关知识 1、字串:连续区间的串 2、子序列:可以不连续的串,但是相对位置要保持一致 3、sprintf、sscanf(对char类型而言) 4、string append(s, pos, n) // 将字符串 s 中,从 pos 开始的 n 个字符连接到当前字符串结尾。 replace( 阅读全文
posted @ 2022-11-25 08:21 风归去 阅读(17) 评论(0) 推荐(0) 编辑
摘要:Clock 题意:给一些时间,24小时制,给一个初始出发时间,问在钟表上最少转多少度能把所有给的时间都经历一遍。 思路:分四种情况模拟。 注意: 求的是度数,所以最后要乘6转换。 3:00,转到15:00,需要转动0度。 取模要对一圈取模,mod = 43200。 #include<bits/std 阅读全文
posted @ 2022-11-24 20:09 风归去 阅读(28) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2022-11-23 08:39 风归去 阅读(0) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2022-11-23 08:22 风归去 阅读(0) 评论(0) 推荐(0) 编辑
摘要:F Auxiliary Set 树上LCA + DFS 注意一下输出格式! #include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int t, n, q, ans; int fa[N]; // 存储点i的父亲节点 i 阅读全文
posted @ 2022-11-19 20:41 风归去 阅读(21) 评论(0) 推荐(0) 编辑
摘要:B - Bracket Sequence 思路: 用一个flag来标记括号的数目,如果括号数目是个偶数的话,就代表当前要执行'+'操作,反之就是'*'操作。对于最外层的数,是没有计算的。 所以最后要单独判断栈是不是空的,如果不是空的,还要把这些数弹出来进行计算。 想差了一点,应该是计算完一个括号之后 阅读全文
posted @ 2022-11-19 20:41 风归去 阅读(29) 评论(0) 推荐(0) 编辑
摘要:C. Manipulating History 题意:给出一些字符串,有原始串(只含一个字符的串)、被替换的串、替换串、 最终串(最后一行),求原始串。 2 a ab b cd acd Initially s is "a". In the first operation, Keine chooses 阅读全文
posted @ 2022-11-19 20:39 风归去 阅读(22) 评论(0) 推荐(0) 编辑
摘要:D. Required Length 题意:给你一个长度n,一个数x,x每个后续状态可以由前一个状态乘以前一个状态的某一位上的数字得到,问最少多少步,能把x变成一个n位数。如果不能变成n位数,输出-1。 思路:bfs + map。map用来记录第一次到达某个数所要经过的步数,第一次找到的值就是步数的 阅读全文
posted @ 2022-11-19 20:38 风归去 阅读(44) 评论(0) 推荐(0) 编辑
摘要:1、E - Fridge 教训:做题的时候,没有想清楚问题,把问题复杂化了 #include <bits/stdc++.h> #define int long long using namespace std; const int N = 1010; string st; int cnt[N], m 阅读全文
posted @ 2022-11-19 20:37 风归去 阅读(29) 评论(0) 推荐(0) 编辑
摘要:C. Sum of Substrings 题目大概意思,给你一个01串,求和最小,其中和是该串所有相邻字符所组成的十进制数的和。 如:0110, sum = 01 + 11 + 10 = 22。 通过观察我们可以发现,除了第一个位置和最后一个位置,其他位置上的1对和的贡献都是11。 所以我们只需要特 阅读全文
posted @ 2022-11-19 20:35 风归去 阅读(49) 评论(0) 推荐(0) 编辑
摘要:Frogger 法一:floyd #include<iostream> #include<cstring> #include<algorithm> #include<cstdio> #include<cmath> #include<iomanip> #define int long long int 阅读全文
posted @ 2022-11-19 20:33 风归去 阅读(20) 评论(0) 推荐(0) 编辑
摘要:G water testing 题意:给你一个多边形(可能是凸多边形,也可能是凹多边形),问该多边形内有多少个整数点(不包含边界)。 思路:皮克定理 + 叉乘计算三角形面积:皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式,该公式可以表示为S=a+b÷2-1,其中a表示多边形内部的点数,b表示 阅读全文
posted @ 2022-11-19 20:32 风归去 阅读(20) 评论(0) 推荐(0) 编辑
摘要:F - Subarrays 题意:给你一个序列,问这个序列里有多少个子串的和能被k整除。 思路:求前缀和,然后每个位置对k取模,模数相等的位置之间,是一个满足条件的字串。 因为求的是前缀和,所以取模后相等,做差刚好去掉这个模后结果。 某个位置前面有多少个取模和该位置取模相等的数,用map记录一下。 阅读全文
posted @ 2022-11-19 20:31 风归去 阅读(37) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示
🚀
回顶
收起
🔑