随笔分类 - 算法
算法模板,题目
摘要:一些场景希望同样的请求尽量落到一台机器上,比如访问缓存集群时,我们往往希望同一种请求能落到同一个后端上,以充分利用其上已有的缓存,不同的机器承载不同的稳定working set。(类似redis集群分片,每一片负责一个set的keys,每个分片的数据互不相交) 而不是随机地散落到所有机器上,那样的话
阅读全文
摘要:LALB全称Locality-aware load balancing,是一个能把请求及时、自动地送到延时最低的下游的负载均衡算法,特别适合混合部署环境。 LALB可以解决的问题: 下游的机器配置不同,访问延时不同,轮询和随机分流效果不佳。 下游服务和离线服务或其他服务混部,性能难以预测。 自动地把
阅读全文
摘要:
题目【拆点】【分层图】【最短路】 思路 拆点: 将一个状态 拆为 k+1 个状态 原来dijkstra(dist, j) 现在拆成k+1个状态, 状态变为(dist, j, cnt) cnt为当前已免费使用的次数 代码(dijkstra + 拆点) #include <bits/stdc++.h>
阅读全文
![[JLOI2011]飞行路线](https://img2020.cnblogs.com/blog/2413091/202108/2413091-20210824222136221-1506172350.png)
摘要:
题目【逆序对应用】 思路 首先,什么状态是目标状态 即(ai-bi)^2 最小的状态=ai^2+bi^2-2aibi ai^2与bi^2不变, 主要要求sum(aibi)最大 可以证明,第二列的大小顺序与第一列保持一致最大 即aibi差距最小最大 令x[sx[i]] = sx[i] x的逆序对即为需
阅读全文
![[NOIP2013 提高组] 火柴排队](https://img2020.cnblogs.com/blog/2413091/202108/2413091-20210824221721546-1222349401.png)
摘要:
题目 【多路归并】 思路 多路合并的思想 每个函数为一路,每一路从1...开始单调递增 维护指针数组 维护小根堆,每次取最小的元素,并修改指针 代码 #include <bits/stdc++.h> using namespace std; typedef long long LL; const i
阅读全文

摘要:
题目【带权并查集】 思路 在每次合并的时候,只要更新合并前队头到目前队头的距离就可以了 之后其它的就可以利用它来算出自己到队头的距离。 对于原来的队头,它到队头的距离为0,当将它所在的队列移到另一个队列后面时,它到队头的距离就是排在它前面的飞船数,也就是合并前的num[pa]。 代码 #includ
阅读全文
![[NOI2002] 银河英雄传说](https://img2020.cnblogs.com/blog/2413091/202108/2413091-20210818220128398-1397650686.png)
摘要:
题目 【并查集】 思路 >=k即符合条件的边才给它合并,这样的话这个连通块中所有的点都符合条件啦 每次询问都重新合并一次的话会超时 用到两个快排,把每条边从大到小排,再把询问的k从大到小排 先做最大的k,把符合条件的点合并后,那么下一个k肯定比这个小啦 那么符合大k的点肯定符合小k的点啦,那么就不用
阅读全文
![[USACO18JAN]MooTube G](https://img2020.cnblogs.com/blog/2413091/202108/2413091-20210821164623047-1679106704.png)
摘要:
题目描述 城现有两座监狱,一共关押着罪犯。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为 的罪犯被关押在同一监狱,他们俩之间会发生摩擦
阅读全文

摘要:
题目描述 我们常常会说这样的话:“X 年是自 Y 年以来降雨量最多的”。它的含义是 X 年的降雨量不超过 Y 年,且对于任意 Y<Z<X,Z 年的降雨量严格小于 X 年。例如 2002,2003,2004 和 2005 年的降雨量分别为 4920,5901,2832 和 3890,则可以说“2005
阅读全文
![P2471 [SCOI2007]降雨量](https://img2020.cnblogs.com/blog/2413091/202108/2413091-20210815222459369-1688789086.png)
摘要:
问题分析: 八数码问题是一个经典的BFS问题,把棋局看成一个状态图,共有9!种状态。从初始棋局开始,每次转移到下个状态,直到目标棋局为止。 仔细分析可知,八数码的关键是判重,如果不去除重复状态,程序会产生很多无效状态,从而复杂度大大增加 解决算法: BFS + Cantor 案例分析: (0表示空格
阅读全文

摘要:
一)基础算法 split vector<string> split(string& s, char c) { vector<string> res; int i = 0; while (i<s.size() && s[i] == c) i++; if (i >= s.size()) return {
阅读全文
