二分法
以下摘要由GPT-4o生成:本文讨论了序列二分的几种方法,包括暴力解法和二分优化。首先介绍了upper_bound和lower_bound函数的使用,前者用于找到序列中第一个严格大于x的位置,后者用于找到大于等于x的位置。接着,强调了核心代码的定制修改。此外,还提到了一些相关题目,如最小值最大问题和数列分段问题,同样适用于二分法的应用,特别是在处理具有单调性和二分性的场景中。
序列二分0最大通过数 - 蓝桥云课
暴力解法
123456789101112131415161718192021222324252627282930313233343536#include <iostream>#include <cstring>#include <algorithm>using namespace std;typedef long long LL;//暴力解法const int N = 200010; //2*10^5int n, m, k;LL a[N],b[N];int ans;int main() { cin >> ...
匈牙利算法
[question linked]
谈恋爱
题目描述有 ai 个男生, 编号 1,,,a,和 bi 个女生,编号 1,,,b。
第 ui个男生想和第 vi个女生谈恋爱。
在女生都愿意的情况下最多出现几对情侣。
输入描述第 1 行为 a,b,m
接下来的 m 行每行包含两个正整数 u,v ,保证 1≤u≤a,1≤v≤b 。
1≤a,b≤500,1≤m≤250000。
输出描述一个整数,表示最多产生多少对情侣。
输入输出样例示例 1
输入
12342 2 31 11 22 1
输出
12
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#include <iostream>#include <cstring>using namespace std;const int N = 1000; // 增大数组容量const int M = 250010;int n1, n2, m;int e[M], ne[M], h[N], idx;i ...
并查集与最小生成树
question linked
题目描述LL 城一共有 N 个小区。
小明是城市建设的规划者,他计划在城市修 M* 条路,每修建一条路都要支付工人们相应的工钱(需要支付的工钱 == 路的长度)。
然而小明所拿到的经费并不够支付修建 M条路的工钱,于是迫于无奈,他只能将计划改变为修建若干条路,使得 N 个小区之间两两联通。
小明希望尽量剩下更多的经费投入到别的项目中,因此请你通过程序帮他计算出完成计划所需的最低开销。
输入描述输入第一行包含三个正整数 N,M。
第 22 到 M+1 行每行包含三个正整数 u,v,wu,v,w,表示 u↔vu↔v 之间存在一条距离为 ww 的路。
1≤N≤10^5^,0≤m≤3×10^5^,1≤ui,vi≤N,0≤wi≤10^9^。
输出描述输出占一行,包含一个整数,表示完成计划所需的最低开销。
若无法完成计划,则输出 −1−1。
输入输出样例示例 1
输入
12345675 61 2 21 3 71 4 62 3 13 4 33 5 2
输出
18
kruskal algorithm时间复杂度:O(M * log(M)); ...
滑动窗口与双指针
以下摘要由GPT-4o生成:小明在维护一个程序员论坛时,收集了一份关于帖子“点赞”的日志,日志包含 N 行数据,每行记录了某个时刻 ts 和帖子编号 id 的点赞情况。他希望统计出哪些帖子曾被认为是“热帖”,定义为在任意长度为 D 的时间段内至少收到 K 个赞。任务是根据给定的日志统计所有曾是“热帖”的帖子编号,并按从小到大的顺序输出这些编号。
题目:日志统计(第九届蓝桥杯省赛C++ B组)小明维护着一个程序员论坛。现在他收集了一份”点赞”日志,日志共有 N 行。
其中每一行的格式是:
1ts id
表示在 ts 时刻编号 id 的帖子收到一个”赞”。
现在小明想统计有哪些帖子曾经是”热帖”。
如果一个帖子曾在任意一个长度为 D 的时间段内收到不少于 K个赞,小明就认为这个帖子曾是”热帖”。
具体来说,如果存在某个时刻 T 满足该帖在 [T,T+D) 这段时间内(注意是左闭右开区间)收到不少于 K 个赞,该帖就曾是”热帖”。
给定日志,请你帮助小明统计出所有曾是”热帖”的帖子编号。
输入格式第一行包含三个整数 N,D,K。
以下 N 行每行一条日志,包含两个整数 ts ...
dijkstra
以下摘要由GPT-4o生成:SPFA(Shortest Path Faster Algorithm)是一种针对最短路径问题的高效算法,特别适用于处理含有负权边的图。其核心思想是通过动态选择可能优化路径的节点进行松弛,避免冗余操作。与Dijkstra算法相比,SPFA允许节点多次入队和处理,从而能及时更新路径长度,尤其在遇到负权边时表现出更好的灵活性。然而,如果图中存在负权环,SPFA可能会出现死循环,因此需要额外判断。整体而言,SPFA通过“按需松弛”提高了效率,适应性强,但在使用时需关注负权环的问题。
题目链接[1.蓝桥公园 - 单源最短路径]
floyd时间复杂度O(n ^ n ^ n) n == 100左右
12345678910111213141516171819202122232425262728293031323334353637383940414243#include <cstdio>#include <cstring>#include <iostream>int n, m, q;const int N ...
高次幂与费马小引理
以下摘要由GPT-4o生成:在这个问题中,魔术师小蓝通过对三个红包中的金币数量进行 N 次变换来展示一个红包魔术。每次变换会将每个红包的金币数更改为其他两个红包金币数的乘积。给定初始的 A、B、C 和变换次数 N,目标是计算 N 次变换后这三个红包金币数量的总乘积,并对 1e9+7 取模以避免结果过大。题目涉及使用费马小定理来简化计算过程,以提高效率。输入包括多个测试用例,每个用例提供初始金币数和变换次数。
题目链接[6.春晚魔术【算法赛】 - 蓝桥云课]
问题描述在蓝桥卫视春晚的直播现场,魔术师小蓝表演了一个红包魔术。只见他拿出了三个红包,里边分别装有 A、B 和 C 个金币。而后,他挥动魔术棒,念动咒语“福禄寿喜财神到~”,对红包里的金币进行 N 次变换。每次变换,每个红包的金币数量都会变成其他两个红包金币数量的乘积。
例如:
初始金币数量 A=2, B=3,C=5,进行 N*=1 次变换后,金币数量变为 15,10,6。
初始金币数量 A=1,B=2,C=3,进行 N=2次变换后,金币数 ...
线性筛质因数
以下摘要由GPT-4o生成:题目要求计算正整数 N 的每个数的最小质因子的总和,即求和 $\sum\limits_{i=2}^N F(i)$。输入中包含多个测试数据,数量 T 可达 10^6,而 N 的范围为 2 到 2×10^7。为了高效解决问题,可以采用线性筛法(或欧拉筛),其相较于传统的试除法具有更好的性能表现,能够在较短时间内完成质因子的计算并输出结果。
题目链接[15.最小质因子之和(Hard Version) - 蓝桥云课]
题目描述定义 F(i) 表示整数 i 的最小质因子。现给定一个正整数 N,请你求出 $\sum\limits_{i=2}^N F(i)$
输入描述第 11 行为一个整数 T,表示测试数据数量。
接下来的 T 行每行包含一个正整数* N*。
$1≤T≤10^6,2≤N≤2×10^7。$
输出描述输出共 T 行,每行包含一个整数,表示答案。
输入输出样例示例 1
输入
1234351015
输出
123122859
普通素数的求法(试除法)12345678910111213141516171819202122232 ...
kmp算法
以下摘要由GPT-4o生成:本文讨论了字符串匹配的两种解法:暴力枚举和KMP算法。暴力枚举方法通过双层循环检查每个字符是否匹配,时间复杂度为O(N*M)。而KMP算法则通过构造next数组来优化匹配过程,避免重复比较,从而实现线性时间复杂度O(N+M)。其中,next数组帮助确定在不匹配时回溯的位置,提高了匹配效率。
题目描述str = abcabca
ptr = abc
那么称 ptr 在 str 字符串中匹配,且第一次匹配位置为 0,第二次为 3;
解法一 暴力枚举;传统代码处理字符串匹配问题时会进行两次循环,第一层为选定 str 字符串中的字符, 第二层为 开始比较 ptr 与次字符是否相等
如若相等,则比较 str 与 ptr的下一字符,
如若不等,则第一层循环加一,从str 下一个字符开始比较
123456789101112vector<int> Match(char* str, int n, char* ptr, int m) { vector<int> ans; for (int i = 0; i < n; ...
flood-fill算法
以下摘要由GPT-4o生成:该问题要求编写程序计算你从指定的黑色瓷砖出发能够到达的所有黑色瓷砖数量。输入数据包括多个数据集合,每个集合包含瓷砖的宽度和高度,以及瓷砖的颜色信息。黑色瓷砖用‘.’表示,红色瓷砖用‘#’表示,而起始位置用‘@’表示。程序需要遍历相邻的黑色瓷砖,可以使用深度优先搜索(DFS)或广度优先搜索(BFS)算法来实现。输出每个数据集合中可到达的黑色瓷砖数,包括起始位置。结束输入时,当读取到“0 0”时停止处理。数据范围为1≤W,H≤20。
有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。
你站在其中一块黑色的瓷砖上,只能向相邻(上下左右四个方向)的黑色瓷砖移动。
请写一个程序,计算你总共能够到达多少块黑色的瓷砖。
输入格式输入包括多个数据集合。
每个数据集合的第一行是两个整数 W 和 H,分别表示 x 方向和 y 方向瓷砖的数量。
在接下来的 H 行中,每行包括 W个字符。每个字符表示一块瓷砖的颜色,规则如下
1)‘.’:黑色的瓷砖;2)‘#’:红色的瓷砖;3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。该字符在每个数据集合中唯一出现一次。
当在一行 ...
树状数组与线段树
以下摘要由GPT-4o生成:题目一涉及操作一个数列,允许对元素进行修改和求子数列的和。输入包括数列的长度和操作次数,数列本身,以及每个操作的具体细节。题目要求在操作类型为求和时输出对应的结果。题目二则关注星星的坐标,定义了星星的等级为其左下方(包括正左和正下)星星的数量。输入给出星星的数量和各自的坐标,要求统计每个等级的星星数量,并按级别输出结果。这两个题目的数据范围较大,需要有效的算法处理。
题目一给定 n个数组成的一个数列,规定有两种操作,一是修改某个元素,二是求子数列 [a,b][a,b] 的连续和。
输入格式第一行包含两个整数 n 和 m,分别表示数的个数和操作次数。
第二行包含 n 个整数,表示完整数列。
接下来 m 行,每行包含三个整数 k,a,b (k=0,表示求子数列[a,b][a,b]的和;k=1,表示第 a个数加 b)。
数列从 11 开始计数。
输出格式输出若干行数字,表示 k=0 时,对应的子数列 [a,b][a,b] 的连续和。
数据范围1≤n≤1000001≤m≤1000001≤a≤b≤n数据保证在任何时候,数列中所 ...