- 博客(62)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 STL函数及使用
容器类pair#include <iostream>using namespace std;int main(){ pair<int,int> a; //创建一个pair pair<string,int> d; a.first=1; //pair的赋值 a.second=2; cout<<a.first<<" "<<a.second<<endl; //输出 pair<int,int
2022-01-16 21:49:23
504
1
原创 Python问题:NotImplementedError: The confidence keyword argument is only available if OpenCV is install
出现了问题:NotImplementedError: The confidence keyword argument is only available if OpenCV is install。Python 用Pyinstaller生成exe的问题,因为用了locateOnScreen的confidence参数,所以调用了OpenCV,最后,发现是Pyinstaller与OpenCV版本冲突所致,最后用 OpenCV4.5.3.56解决了。
2022-09-26 00:38:54
3922
1
原创 整除分块入门
整除分块首先引入一个问题,若我们要求这么一个式子:∑i=1n⌊ni⌋\sum\limits_{i=1}^{n} \left\lfloor\dfrac{n}{i}\right\rfloori=1∑n⌊in⌋自然而然会想到这么一段翻译代码:for(int i=1;i<=n;i++) sum+=n/i;但是,如果 1≤n≤1091\le n\le10^91≤n≤109,又该如何解决呢?显然,⌊ni⌋\left\lfloor\dfrac{n}{i}\right\rfloor⌊in⌋
2022-05-25 16:47:14
193
原创 线性同余与乘法逆元
欧几里得定理∀a,b∈N,gcd(a,b)=gcd(b,a mod b)\forall a,b\in \N,\gcd(a,b)=\gcd(b,a\bmod b)∀a,b∈N,gcd(a,b)=gcd(b,amodb)证明:考虑记a与b的公因数为d∵∃t,k,r∈N,b=t⋅d,a=k⋅(t⋅d)+r∵d∣b,d∣a∴∃x∈N,x⋅d=a=k⋅(t⋅d)+r⇔x=k⋅(t⋅d)+rd=kt+rd∵x∈N∴d∣r∴d∣(a mod b)∴a mod b的因数集与a与b的公因数集相同∴gcd(a,b)
2022-05-13 22:09:15
905
原创 欧拉函数初步
概念若a,b∈Z,gcd(a,b)=1,则称a与b互质对于n∈Z,将区间[1,n]中与n互质的个数称为欧拉函数,记作φ(n)若a,b\in\Z,\gcd(a,b)=1,则称a与b\color{Blue}互质\\\color{black}对于n\in\Z,将区间[1,n]中与n互质的个数称为\color{Blue}{欧拉函数},记作\varphi(n)若a,b∈Z,gcd(a,b)=1,则称a与b互质对于n∈Z,将区间[1,n]中与n互质的个数称为欧拉函数,记作φ(n)欧拉函数考虑n=p1c1⋅p2
2022-05-06 21:12:31
426
1
原创 同余初步性质
基本概念前言在小学中,我们接触到了整数除法,其中会有一个概念名为余数。当然,这个概念在小学五年级学小数的时候就被抛弃了,但是在数论的知识中,它再次卷土重来,折磨众生。整除概念对于一个整数 aaa 和 mmm,我们取 a÷ma\div ma÷m 下的余数,记为 a mod ma \bmod mamodm易得,整除的概念为除以 mmm 的意义下余数为 000,即a mod m=0a \bmod m=0amodm=0:一般的,对于整数 aaa 和 mmm,若 a mod m=0a \bmod m=
2022-04-23 14:25:03
1894
2
原创 区间维护(树状数组)
问题描述:题目描述解题思路:有关树状数组的基本知识这里就不再赘述,我们只需要知道他可以处理区间维护性的问题以及可修改的RMQ问题等,效率较高。下面是有关线段树的操作单点修改void update(int x,int k){ for(;x<=n;x=x+(x&(-x))) t[x]+=k; //x位置的修改只对他的祖先造成影响,而x的祖先恰好是x+x&-x一路递增,因此直接修改x的祖先的值即可 return ;}区间查询int sum(int
2022-01-29 18:53:31
1469
原创 区间维护(分块大法+卡常)
题目描述:题目传送门解题思路:首先我们先忽略题目的标题(树状数组模板),我们来尝试一种新的算法——分块。分块思想分块是一种优美的暴力(by DFT)。他的核心思想在于将一个要维护的区间(长度为 nnn)分成又穷个 n\sqrt nn 个子区间来进行分别维护。每个子区间的长度都为 n\sqrt nn,将我们所要查询的区间所覆盖的每个子区间的信息进行整合,就是我们要查询的区间的信息。这样子将区间分块来处理有什么好处呢?因为它可以将对一个区间维护的复杂度均摊到每一个长度为 n\sqrt
2022-01-27 13:09:37
948
原创 最近公共祖先 (LCA倍增)
题目描述:题目解题思路:首先思考暴力算法,我们先将待处理的 u,vu,vu,v 两点移动到相同深度的地方,然后两个一起向个自的父节点往上跳,直到跳到最后一次父节点相同的时候即为它们的最近公共祖先。很显然这个思想是没有问题,但是要是纯属暴力的一级一级往上跳这样实现,很显然会超时,那么我们就可以考虑倍增优化。对于倍增,我们知道他可以把一大段繁琐的步骤压缩为一个一次就进行 2x2^x2x 次的步骤进行对步骤的加速。因此我们可以把算法中的一级一级往上跳转换为每次跳 2i2^i2i 级,也就是说在树上倍增
2022-01-19 11:06:57
921
原创 判定有向无环图 (拓扑排序)
问题描述:给出一张有向图,问它是否存在环。解题思路:这里可以用到拓扑排序。拓扑排序的定义拓扑排序应用于有向无环图之中,排序完以后会出现这样的性质:对于一个点p,只对排序位置在它之后的点有边。如果有环,则环上的点以及环上点所能到达的点都不会被放进拓扑序列中。举例来说,如果我们将一系列需要运行的任务构成一个有向图,图中的有向边则代表某一任务必须在另一个任务之前完成这一限制。那么运用拓扑排序,我们就能得到满足执行顺序限制条件的一系列任务所需执行的先后顺序。当然也有可能图中并不存在这样一个拓扑顺序
2022-01-14 12:16:57
1785
原创 强连通分量 (Kosaraju)
问题描述求一个有向图中的强连通分量的个数。解题思路:明确一下强连通的定义:存在 iii 和 jjj 两点,使得 iii 和 jjj 互相可抵达。根据强连通的定义,我们可以得出,若对存在强连通的图进行置换(将所有有向边反转),那么强连通任然是强连通的。这里我们先给出一张存在两个强连通的图以及它的置换图。接下来是算法的步骤: 先任意找到一个点对原图进行 dfsdfsdfs 遍历一遍,然后将每个节点出栈的顺序记录。这一步骤保证了接下来算法求出的强连通分量是按照拓扑排序给出的。 按
2022-01-14 09:40:57
448
原创 洛谷P1037 产生数 (Floyd联通性问题)
问题描述:题目传送门解题思路:可以利用乘法原理,判断原数上每一位数字有几种变化情况,然后相乘即为答案。很显然,题目所给的变化情况即为一条边,而每一个数字的变化即为一个连通块,因此单个数字变化的个数即为这个连通块的大小。判断联通快的算法很多,可以通过 dfsdfsdfs 和 bfsbfsbfs 等搜索进行遍历每个连通块,这里我们通过 FloydFloydFloyd 求出 iii 和 jjj 是否相连来解决连通块问题。既 iii 所能到达的所有 jjj 都处在同一连通块,至于连通块的大小即为 ii
2022-01-13 15:33:33
296
原创 51nod 2650 最短缩减路径 (拆点最短路)
问题描述:题目传送门解题思路:我们一般会想到先在图上跑一遍最短路,然后在最短路径中找一条最长的边进行缩短。但是很容易可以发现,这种做法是很假的,因为缩短路径可能会使某条非最短路变成最短路。此时我们需要考虑一种清奇的思路。构建两张一模一样的图,其中上图 GGG 表示还未使用路径缩短的图,下图 G′G'G′ 表示已经使用了路径缩短的图,而上下图连接的单向变表示被路径缩短的边。如图:这样一来,由于在路径中必然需要使用一次路径缩短,因此我们必然要从上图的起点到达下图的终点,因此我们可以在这种双层图
2022-01-13 11:15:39
434
原创 最短路模板大全
例题:题目传送门解题思路:各路板板摆上:SPAF 最短路(链式前向星)int head[200010]={0},tot=0;struct Gar{ int x,y,w,next;} e[500010];void add(int x,int y,int w){ tot++; e[tot].x=x; e[tot].y=y; e[tot].w=w; e[tot].next=head[x]; head[x]=tot;}queue<int> q;bool us
2022-01-12 16:27:28
289
原创 SSL 1613 最短路问题
题目描述:有 NNN 个点(N<100)(N<100)(N<100),给出每个点的直角系坐标,某些点之间有双向变相连,边权为坐标上两点的直线距离,现在给出你原点和目标点,让你求两点间的最短路(保留两位小数)。样例输入:50 0 2 02 20 23 151 21 31 42 53 51 5样例输出:3.41解题思路:典型的最短路问题,由于NNN 太小了,我们可以用任何算法随便搞。这里来介绍FloyedFloyedFloyed 算法。Floyed
2021-12-25 15:38:27
886
原创 洛谷 P2449 矩形(并查集)
题目描述:题目传送门解题思路:很板子的一道并查集题目,就是求这个由多个矩形组成的连通分量。我们只需要判断这个矩形与先前互不联通的矩形是否联通,若联通,那么这块矩形相当于已经标记过了;若没有,那么这是一块崭新的矩形,最后看看有多少连通块即可。这得一提的是判断矩形是否重合的方法:首先我们得判断矩形是否有一部分的面重合,那么显然符合同一矩形的情况。然后判断是否有矩形只有顶点重合,若有,不符合重合情况。矩形重合判断代码:bool check(int x1,int y1,int x2,int
2021-12-24 20:52:02
617
原创 洛谷 P1196 银河英雄传说 (带权并查集)
题目描述:题目传送门解题思路:根据数据范围以及题目中提到的合并等操作可以联想用并查集求解。但是仔细想想,普通并查集只能判断某元素是否为统一集合的联通性问题,而题目中提到了“战舰数量”等权值性的问题,这种时候我们就要对并查集进行一些改变,成为可以处理权值的带权并查集。带权并查集必须要了解的前置知识是并查集(废话),百度食用更佳。带权并查集其实和普通并查集没有本质的区别,仅仅只是需要在路径压缩或合并集合的时候维护或更新节点与父节点的边权关系以及维护该集合内元素个数。设 faxfa_{x
2021-12-19 14:04:26
569
3
原创 洛谷 P2502 旅行 SSL 1312 (并查集暴力)
题目描述:题目传送门解题思路:遇到这种满足某种条件下找最值得问题,如这题,在路径中找到比值最小的最大值和最小值。我们并不需要先找到路径,然后在路径里面找到最大值和最小值,这样子的话很难找到头绪。我们可一个换个思路,枚举路劲的权值的最小值的下限 iii 和最大值的上限 jjj然后把符合这个上下限权值条件的边上的点所在的集合都按边的关系合并,也就是说若 aaa 和 bbb 之间有一条满足条件的边,则将 aaa 和 bbb 所在的集合合并。最后判断选用的这些边是否构成一条能够从起点到达目标点路劲,
2021-12-18 15:51:53
567
原创 CF510B 两点(DFS/BFS/并查集判环)
题目描述:题目传送门解题思路:一道在地图上连通块中判环的题目,我们可以考虑用 dfsdfsdfs 和 bfsbfsbfs 两种方法来判环。深搜判环由于环的本质上就类似于一条头尾相接的链,因此用“一路走到底” 的DFS是最合适不过的了。我们每个点都尝试延伸,向与它同颜色的一个点一直往下走,直道找到一条长度大于4的路径,使得他们头尾相连,那么这就是一条符合题目要求的环。代码难度也不高,就是爆搜。#include <bits/stdc++.h>using namespace
2021-12-18 09:48:25
843
原创 51nod 2667 染车(广度搜索)
题目描述:解题思路:我们可以把每辆车试做一个点,那么这辆车所能互相攻击到的车辆之间就相当于存在一条边。那么很显然,只有互相不被所有车攻击到的车才能染成不同的颜色,那么也就是说同一连通块中的车辆都能被攻击到,也就是连通块的个数即为最大染色个数。可以想到,只有具备攻击力的车辆才能进行扩展,,才能加入队列,而作为空地的点仅仅相当于类似边的存在,不用加入队列。接下来就是非常基础的广搜爆搜。CODE:#include <bits/stdc++.h>using namespace std
2021-12-17 21:25:21
316
1
原创 SSL 1759 连通分量(七种做法)
题目描述:解题思路:首先需要有前置知识,在无向图中,联通分量表示最大联通子图中的节点个数。然后我们考虑多种做法。做法一:dfs+dfs+dfs+ 邻接矩阵#include <iostream>#include <cstring>using namespace std;int n,g[1001][1001]={0},sum;bool vis[100010]={false};int dfs(int x){ vis[x]=true; for(int i
2021-12-17 20:09:04
648
5
原创 SSL 1455 电子老鼠闯迷宫
题目描述:样例错了,输出为 27。解题思路:这一题就是一道裸的广搜,主要就是考虑路径输出。我们需要一个 preipre_iprei ,记录节点 iii 在广搜中是由哪个节点转移的,然后最后用递归一步步倒推输出,即可处理路径问题。输出路径函数:void print(int p){ if(p==1) { cout<<"("<<SX<<","<<SY<<")->"; return ; } pr
2021-12-15 16:46:14
2680
原创 硬币方案 (背包DP)
题目描述:给定 NNN 种硬币,其中第 iii 种硬币的面值为 aia_iai,共有 bib_ibi 个。从中选出若干个硬币,把面值相加,若结果为 sss,则称“面值 sss 能被拼成”。求 111 到 MMM 之间能被拼成的面值有多少个。输入格式:输入包含多组测试数据。每组测试数据第一行包含两个整数 nnn 和 MMM。第二行包含2N个整数,分别表示 a1⋯ana_1\cdots a_na1⋯an 和 b1⋯bnb_1\cdots b_nb1⋯bn。当输入 N=0,M=0N=0,M
2021-12-08 20:15:08
345
原创 SSL 1813 回文词 P1435 回文字串 / [蓝桥杯 2016 省] 密码脱落
题目描述:题目传送门解题思路:这里我们可以考虑回文串的两个性质:回文串正序和倒叙是相同的。回文串以中选取分割点,左部分正序与右部分倒序是相同的如:abbccbba左部分正序:abbc右部分正序:cbba右部分倒叙:abbc因此我们可以从中作文章,延伸出两种解法。性质一解法:可以发现,若要使某个串成为回文串,那么显然要使这个串的倒序与这个串的正序相同。那么问题就变成了:两个串长度相等,需要插入多少个字母,才能使得这个串的正序与倒序相同。我们发现,若要使正序与倒序相同,显然两个
2021-12-08 17:21:15
659
原创 P4170 木板涂色(区间DP)
题目描述:题目传送门解题思路:此题可以考虑使用区间 dpdpdp 求解。aia_iai 表示为目标状态中第 iii 个位置的颜色。设 fi,jf_{i,j}fi,j 表示在一个 (i,j)(i,j)(i,j) 的区间内,使这个区间达到目标颜色需要的最少涂色次数。可以考虑分类讨论两种情况:若 ai=aja_i=a_jai=aj ,也就是说为 iii 上色时可以同时为 jjj 上色,因此 jjj 可以被省略,也就是说这个状态等同于 fi,j−1f_{i,j-1}fi,j−1;也可以
2021-12-07 20:01:00
196
原创 P1776 宝物筛选 (多重背包二进制拆分)
题目描述:题目传送门解题思路:根据题意知此题为多重背包裸题,即每个物品至多可以选 mmm 次的背包题目。世上背包千千万,无一不是 010101 背包的变体,多重背包亦是如此。**若第 iii 个物品的数目为 mim_imi ,我们可以将一种物品视作 mim_imi 个物品,第 jjj 个物品的重量以及价值都是原物品的 jjj 倍。**在此基础上我们可以直接进行 010101 背包。for (int i=1;i<=n;i++) //枚举物品种数 for (int j=V;j>
2021-12-05 14:25:33
295
原创 SSL 1653 数字游戏
题目描述:输入格式:输入文件的第一行是一个整数n(1<=n<=2000)n(1<=n<=2000)n(1<=n<=2000),表示数字个数;第二行一个整数m(1<=m<=n)m(1<=m<=n)m(1<=m<=n),表示回合数,接下来一行有n个不超过100001000010000的正整数,a1,a2,a3,⋯,ana1,a2,a3,\cdots,ana1,a2,a3,⋯,an表示原始序列,最后一行有n个不超过500500500的正
2021-12-04 16:36:28
4519
原创 P1908 逆序对(归并排序)
题目描述:题目传送门解题思路:对于这个问题,我们显然能通过冒泡或选择排序来累计交换次数达到所求目的。但很显然,Θ(n2)\Theta(n^2)Θ(n2) 的排序无法承担 5∗1055*10^55∗105 的数据,因此我们需要用到 Θ(n logn)\Theta(n~log_n)Θ(n logn) 的归并排序。归并排序:首先我们考虑要排序一段 (l,r)(l,r)(l,r) 的区间,归并排序需要考虑分裂和合并两个步骤,我们先看看分裂。如图,对于一个 (l,r)(l,r)(
2021-12-04 12:22:13
989
python tkinter与多线程相关问题
2023-01-18
使用 pygame 模块时遇到的列表值被改变的问题
2023-01-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人