随笔分类 - 算法——倍增
摘要:题目链接:https://www.acwing.com/problem/content/description/296/ 定义conn(s,n)表示由n个s拼接的字符串,问最大的m满足conn(s2,m)能通过conn(s1,n)生成,生成就是去掉一些位置的字符之后能够变成s1。 通过倍增的思想,可
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/295/ 题目给定n个城市,在一个方向上有序排列,每个城市有高度,有两个人a,b,定义两个城市之间的距离是高度之差的绝对值。b只会选择右边距离他最小的一个作为下一个点,a只会选择右边次小的点作为下一个点。a先走。
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/245/ 题目给出一个长度为n-1的序列表示一个位置前面有多少个比他小,问这个序列是多少?这个序列是一个1-n的全排列。 通过从后向前扫描可知每个位置的编号,比如最后一个是an+1,这个位置在之后不考虑,然后从接
阅读全文
摘要:题目链接:https://www.acwing.com/problem/content/description/111/ 首先定义了集合S的校验值,取出m对数,使得每对平方之后求和最大,这个值成为集合S的校验值。现在给定一个数列,求满足每段的校验值小于T的前提下最小能把数列分成连续的几段? 利用倍增
阅读全文
摘要:参考博客:https://www.cnblogs.com/wenzhixin/p/9714760.html 预处理时间复杂度是O(nlogn),代码如下: 1 void init(const vector<int>& A) { 2 int n = A.size(); 3 for(int i = 0;
阅读全文

浙公网安备 33010602011771号