自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 #1 深度优先搜索

如先遍历1,沿(1,2)遍历2,再沿(2,4)遍历4,撞南墙(边界条件)后返回2,继续下一条路径遍历5,返回,遍历6,返回发现以2为起始点的路径已经遍历完了,继续返回,遍历以1为起始点的下一条路径(1,3)从而遍历3,完成对所有点的遍历。DFS其实是针对图论的一种搜索算法,由一个节点出发,不撞南墙不回头式的遍历所有的节点。1.确定该题目的目标状态和边界条件(最重要,边界条件也用来剪枝)3.达到目标状态后的处理(如计数,直接返回退出等)2.找到节点转移方式(找到遍历的路径)首先这个题我们由第一排开始放棋子。

2024-06-01 17:59:23 309

原创 力扣一周题单 - 1

A.移动零B. 第三大的数C. 找到所有数组中消失的数字D. 生命游戏E.合并区间A.合并两个有序链表B.环形链表C.环形链表 IID. 回文链表E. 删除链表的倒数第 N 个结点A.相同的树B.水壶问题C.零钱兑换D.N 皇后A. 二叉树的最大深度B.将有序数组转换为二叉搜索树C.二叉树的最近公共祖先D.路径总和E.路径总和 IIA.爬楼梯B.买卖股票的最佳时机C.买卖股票的最佳时机 IID.零钱兑换(可以感受一下dp和搜索有什么关系咧)A.最长公共前缀B.有效的括号

2024-05-26 14:44:11 277

原创 #1 Numpy & Pandas

Numpy & Pandas。

2024-04-24 19:07:48 208 2

原创 Games101-1-Lecture 03-04Transformation(还剩一个问题)

1.对于一个三维的点(a, b, c),我们给他加一维,从而来区分点和向量,使用0表示向量,1表示点,如(a, b, c, 0)则表示向量(a, b, c),(a, b, c, d)则表示点(a/d, b/d, c/d),即将第四维归1后的点。图像的变换无非就是对于图像的每个像素点进行变换换到另一个点位从而看起来是对图像进行了不同的变换操作(无非就是乘以不同的变换矩阵),上述三种变换均为线性变换,即对。3维图像的变换与二维图像相似,将三维扩展为四维,然后左乘变换矩阵。进行左乘变换矩阵实现。

2024-01-23 21:41:22 837

原创 Opencv+Python笔记(十)灰度直方图、直方图均衡化、掩模的应用

灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其出现的频率。灰度直方图是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率。灰度直方图即对图像中的所有像素点灰度值大小频率的统计。1.dims:需要统计的特征数目。

2023-04-24 20:08:11 1127 1

原创 Opencv+Python笔记(九)模板匹配

如果使用的是平方差匹配,则最小值位置是最佳匹配位置,否则,则最大值位置是最佳匹配位置。5.相关系数匹配(cv.TM_CCOEFF):将模板图像与其均值的相对值,与输入图像与其均值的相关值进行匹配,1表示完美的匹配,-1表示最差的匹配。2.标准(归一化)平方差匹配(cv.TM_SQDIFF_NORMED):归一化后的平方差匹配,结果越接近0匹配度越高,越接近1匹配度越低。3.相关匹配(cv.TM_CCORR):利用模板与图像间的乘法进行匹配,数值越大表示匹配程度较高,越小表示匹配效果差。

2023-04-24 11:30:23 794

原创 Opencv+Python笔记(八)轮廓检测

轮廓检测有什么作用:使用轮廓检测可以获得物体的边界,方便在图像中对他们进行定位。什么是轮廓:当我们把物体边缘所有的点连接在一起可以获得轮廓。对于特定的轮廓是指那些具有相同颜色和亮度的边界点像素。(1)读入图像(2)将读入图像转化为灰度图(3)对(2)得到的灰度图进行二值化或者Candy边缘检测处理,从而把感兴趣的物体加亮凸显出来以便于使用轮廓检测算法(4)进行轮廓检测(使用 findContours()函数来检测图像中的所有的轮廓)

2023-04-23 23:18:50 1529

原创 Opencv+Python笔记(七)边缘检测原理

梯度计算总是由右边减去左边。

2023-04-23 00:09:49 1647

原创 Opencv+Python笔记(六)图像的平滑处理

图像在获取、传输的过程中,可能会受到干扰的影响,会产生噪声,噪声是一种出错了的信号,噪声会造成图像粗糙。图像平滑处理的目的是去除图像中的噪声和不必要的细节,使图像更加清晰和易于分析。常用的平滑滤波器包括高斯滤波、中值滤波和均值滤波等。这些滤波器都采用一定的卷积方法对像素点进行平滑处理。

2023-04-22 12:33:20 412

原创 Opencv+Python笔记(五)图像阈值化处理

图像阈值化可以理解为一个简单的图像分割操作,阈值又称为临界值,它的目的是确定出一个范围,然后这个范围内的像素点使用同一种方法处理,而阈值之外的部分则使用另一种处理方法或保持原样。阈值处理有2种方式,一种是固定阈值方式,又包括多种处理模式,另一种是非固定阈值,由程序根据算法以及给出的最大阈值计算图像合适的阈值,再用这个阈值进行二值化处理。

2023-04-22 11:29:59 546

原创 Opencv+Python笔记(四)图像的形态学处理

闭运算也是平滑图像的轮廓,与开运算相反,它一般熔合窄的缺口和细长的弯口,去掉小洞,填补轮廓上的缝隙。用1代表黑色0代表白色 对A图进行核为 3 * 3 的腐蚀操作后,中间的0会变成1 同理 对B图进行核为3 * 3的膨胀操作后,中间的1会变成0。腐蚀的规则就是:kernel覆盖img的区域如果有白色,则把核的中心那个点标注为白色,如果该区域没有白色,则不用处理,这里相当于“&&”且运算。闭运算可以删除亮背景下的暗区域,那么用原图减去闭运算结果就可以得到原图像中灰度较暗的区域,所以又称黑底帽变换。

2023-04-21 22:54:38 767

原创 Opencv+Python笔记(三)图像的基本运算

输入:src1 src2:需要相加的两张图片;dst:相加后的输出图像(可省略);mask:掩码矩阵(可省略),mask 是一个8位的单通道图像,它指定了目标图像哪些元素会被修改;输入:1.src1,src2:相加图像;2.α,β:分别为src1和src2的权重。输出:输出相加后的图像 img = src1 * α + src2 * β。图像的混合也是图像加法的一种类型,不过可以改变两个图像相加时的权重大小。输入:img1,img2:要进行运算的图片;输出:相加后的所得图片。

2023-04-21 19:10:21 711

原创 Opencv+Python笔记(二)图像的基本操作

输入:1.src:原图像 2.top_size,bottom_size,left_size,right_size 边界各填充多少 3.borderType填充方式。#BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb。#BORDER_REFLECT_101:反射法2,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba。输入:1.src:待转换的图像 2.code:转换类型。

2023-04-18 12:58:03 436

原创 Opencv+Python笔记(一)图像的I/O操作

读取方式的标志: 1.cv2.IMREAD_COLOR:(flags省略时的默认选项,也可用1代替),提供3通道的 BGR图像,每个通道一个8位值(0-255)。2.plt.imshow()用于通过matplotlib库显示图像,注意该显示图像的形式是以RGB形式显示,而Opencv是以BGR形式显示的。3.plt.title()用于给该图像标题,plt.xticks([]),plt.ytciks([])用于给图像去x轴和y轴,放入函数中。1.flie:要读取的图像文件路径。1.file:要保存的路径。

2023-04-18 11:13:24 412

原创 Codeforces Round #729 (Div. 2) (A - E)

A. Odd Set水题 看奇数个数是否为n代码#include <bits/stdc++.h>using namespace std;int n, sum;void solve(){ cin >> n; sum = 0; for (int i = 1; i <= n * 2; i ++ ) { int a; cin >> a; if (a & 1) sum ++ ; }

2021-11-11 21:29:51 256

原创 Codeforces Round #753 (Div. 3) (A - G)

A. Linear Keyboard暴力水题 用map来标记一下就行代码#include <bits/stdc++.h>using namespace std;const int N = 28;map<char, int> mp;void solve(){ string str; cin >> str; mp.clear(); for (int i = 0; i < 26; i ++ ) mp[str[i]] = i + 1; i

2021-11-06 15:41:19 140

原创 Codeforces Round #752 (Div. 2)

A. Era贪心水题 从第一个位置开始加1一直到所有数都满足 ai<=i 我们可以找到最大的 ai-i 遍历一下就能找到 在他的前面加 ai-i个1就可以满足题意了代码#include <bits/stdc++.h>using namespace std;typedef long long ll;ll a[110];ll amax;ll pos;void solve(){ int n; cin >> n; amax = -1; pos = -1

2021-11-01 14:29:49 91

原创 J.Tree Constructer (2021 icpc 济南)

题意给定一棵树 假设两个点or值为 2^60-1 则这两个点会连一条边 问实现这棵树的话每个点的值为多少思路二分图 + 构造 先把所有点分成两份 每个集合内部不会连边 然后给这两个集合赋值 使得两个集合中连边的两点or值为2^60-1记录一下哪个集合的点最少 然后给这个集合的每个点赋个序号 假设分为黑点白点 黑点最少 我们可以使黑点每位全赋值为1(除了最高位) 然后把它的序号位改为0(防止连到其他点) 而对于白点 我们可以全赋值为0最高位为1然后将它所连的两个点的序号位改为1代码#incl

2021-10-30 17:02:14 398

原创 Codeforces Round #730 (Div. 2)

A. Exciting Bets思维题给定两个数a, b 通过进行若干个二者都加一或者减一操作来使得a和b的gcd最大我们可以知道 max_gcd肯定是 a+k, b+k 的 gcd 又a+k = t1 * max_gcd b + k = t2 * max_gcd所以我们可以得到 b - a = t3 * max_gcd 当t3取1时 max_gcd最大所以我们就得到了a, b操作后最大公因数 再去看加或减哪个操作数比较少即可代码#include <bits/stdc++.h>

2021-10-23 21:32:33 93

原创 Codeforces Round #737 (Div. 2)

A. Ezzat and Two Subsequences水题 把最大的那个拿出来 其他的求平均值即可 可以自己算一下 a1, a2, a3, a4 找最优解代码#include <bits/stdc++.h> using namespace std;typedef long long ll; const int N = 3e5 + 10; inline ll read(){ register ll x = 0, k = 1; char c = getchar();

2021-10-21 21:30:33 109

原创 Codeforces Round #749 (Div. 1 + Div. 2, based on Technocup 2022 Elimination Round 1)

A - Windblume Ode题意 给定一个序列 从此序列中找出一个最大数量的子集 使得这个子集的总和为合数我们可以先计算原集合的和是合数吗 如果是则输出全部如果不是那么它必定是奇数 序列中肯定包含大于等于1个奇数 把它去掉即可代码#include <bits/stdc++.h>using namespace std;const int N = 410;inline int read(){ register int x = 0, k = 1; char c = g

2021-10-19 17:03:04 191

原创 Codeforces Round #745 (Div. 2) (A - C)

A. CQXYM Count Permutations观察所以全排列可以得到满足题意的排列反过来一定不满足题意 所以我们可以求2n的全排列除以2 这里要求逆元 费马小定理可以说一下有(a + b) % P = a % P + b % P true(a - b) % P = a % P - b % P true(a * b) % P = a % P * b % P true(a / b) % P = a % P / b % P false在求除数相余的时候要用逆元费马小定理 a^(p-1)

2021-10-17 17:27:02 192

原创 Codeforces Round #746 (Div. 2) (C 和 E)

C - Bakry and Partitioning给定一棵树 问是否可以通过割边是其变为成2到k个连通块 且所有连通块上的点异或起来相等我们可以这样考虑假如割之后的连通块个数为2x个 即偶数个 若这两个连通块的异或值相等 则整棵树的异或值应该为0那么假如割之后的联通块个数为2x+1个 即奇数个的时候该怎么办呢 这种情况整颗树的异或值肯定不为0的 且连通块个数肯定是大于三的 那么如果最后被割为五个连通块 我们可以使三个相邻连通块合并为一个连通块 异或值依然不变 所以我们只要可以在树中找出大于等于三个

2021-10-16 21:25:47 150

原创 Codeforces Round #743 (Div. 2)

A. Countdown水题 求每位的整数大小加1之和 再判断一下最右位是否为0即可代码#include <bits/stdc++.h>#define rep(i, n) for (int i = 1; i <= (n); i ++ )using namespace std;inline int read(){ register int x = 0, k = 1; char c = getchar(); while (c < '0' || c > '9

2021-10-15 21:31:01 113

原创 Codeforces Round #747 (Div. 2) (A - E1)

A. Consecutive Sum Riddle水题 找两个数l, r 使得l, r之间所有数之和为n 找 -(n - 1) 到 n就好代码#include <bits/stdc++.h>using namespace std;typedef long long ll;ll n, l, r;void solve(){ cin >> n; cout << 1 - n << ' ' << n << endl;

2021-10-15 21:16:43 1207

原创 Codeforces Round #748 (Div. 3) (D1 - E)

D1. All are Same同余题 求所有数加上k*x之后的值相等时k的最大值 即所有数同余k相等 我们可以找到最小值 所有数减去这个最小值然后求gcd所得值即为k的最大值为什么是减去最小值呢? 有 a ≡ b(mod k) 等价于 (a - b) % k = 0 所有我们必须使序列所有数减去一个序列之中的数字来求gcd 减去最小值是为了使得处理后的序列中不包含负数代码#include <bits/stdc++.h>#define rep(i, n) for (int i = 0

2021-10-15 19:55:16 119

原创 Codeforces Round #742 (Div. 2)

A. Domino Disaster签到水题代码#include <bits/stdc++.h> using namespace std; const int N = 110; int n;string st; void solve(){ cin >> n >> st; for (int i = 0; i < st.size(); i ++ ) if (st[i] == 'L') printf("L"); else if (st

2021-10-09 11:43:00 141

原创 AtCoder Beginner Contest 220

A - Find Multiple签到水题 找好边界关系就好代码#include <iostream> using namespace std; int a, b, c; void solve(){ scanf("%d%d%d", &a, &b, &c); int x1 = a / c, x2 = b / c; int y1 = a % c, y2 = b % c; if (x2 - x1 >= 1) printf("%d\n",

2021-10-09 10:30:14 152

原创 CF730J Bottles

01背包问题题目链接题目思路先排序贪心找到需要的最少瓶子 再01背包求求所需瓶子内本来的水的最大值即可因为总水量是一定的 如果最后方案瓶子中原来的水越多 则从外面往里倒的水越少即所需时间越少我们可以用 f[m][k] 来表示 总容量为m 已经用了k个瓶子时的最大Vnomove则有 f[j][k] = max(f[j][k], f[j - b[i]][k - 1] + a[i])ac代码#include <bits/stdc++.h>using namespace std;

2021-10-07 12:05:40 135

原创 P5020 货币系统

一个背包思维题题目链接题目思路对于一个与[n, a]相同的货币系统 如果在a中有可以用其他值表示出来的值 我们就可以将它删去 将所有可以删掉的值删去后我们就可以得到最小的m [m, b]系统我们可以通过背包来解决这个问题ac代码#include <bits/stdc++.h>using namespace std;const int N = 25010;int n;int a[N], f[N];void solve(){ scanf("%d", &n);

2021-10-06 19:58:19 113

原创 P2470 [SCOI2007]压缩

一道不错的区间dp题 思考了好长时间题目链接题目思路我们令 f[i][j][k] 为由i到j且其中是否存在M的区间长度最小值可以分类讨论对于f[i][j][0] 即区间内不存在M的情况 我们可以想到 如果区间内前半段和后半段相等 我们是可以分解为 f[i][mid][0] + 1 即把后半段变为R所以对于每个长度的 f[i][j][0]都处理一次 求最小值 则f[i][j][0] = f[i][k] + j - k;再去考虑f[i][j][1]我们可以遍历区间内的每个点 往里面加M 则可以得

2021-10-05 22:50:33 88

原创 P4302 [SCOI2003]字符串折叠

对于字符串的区间dp 寻找叠加后的最小值 其中叠加转化后的括号和数字均算为字符串长度唯一的难度就是去想到怎样判断字符串是否可以折叠我们可以只判断一个区间中整个字符串是否可以完全折叠为一个 其他的直接相加即可题目思路我们用f[i][j]来表示从i到j处理后的字符串最小长度 所以有如果f[i][j]可以完全叠加 则为min(f[i][j], 叠加后长度 + 2 + 个数)用一个check函数来判断字符串是否可以叠加void check(int l, int r, int len){ for (

2021-10-05 20:26:40 138

原创 P3205 [HNOI2010]合唱队

真没想到会是区间dp 还是要多耍一耍对于区间dp的一些思考 一般什么题用得到区间dp呢?区间dp一般都是由小区间转移到大区间 即通过状态方程不断从小区间更新大区间 通过小区间的各种变量以及怎样去更新大区间 更新的值来确定状态方程怎么写题目思路通过观察题目可以得到 每次加人都是往原区间的左边或者右边去加 每次都是比较的本次需要加的人和上次加的人 则我们可以用 f[ i ][ j ][ 0 / 1 ]来表示当前方案 其中i为区间左端点 j为区间右端点 0表示是从左边加的人 1表示是从右边加的人 从而得到

2021-10-04 21:12:22 80

原创 P3147 [USACO16OPEN]262144 P

一个dp水题 但是刚开始却没有想出来还是看了题解题目链接题目思路刚开始想的是区间dp后来发现数据太大肯定会爆 发现可以这样做用 f[i][j] 表示区间合并结果为i的左端点为j的右端点值则有 f[i][j] = f[i - 1][f[i - 1][j]] 这个状态转移方程看数据 n= 262144 2的18次方 所以最多加十八 即最大范围只能到58了代码#include <bits/stdc++.h>using namespace std;const int N = 60

2021-10-04 14:52:53 89

原创 P4374 [USACO18OPEN]Disruption P

题目链接题目思路给两个点加额外的双向边时 可以观察到只有对于在树上这两个点之间的路径中出现断边的时候才有可能会用的到这条边 如下图所示 则我们可以维护每个边权 转化为点权 维护最小值 对于给出的query的边 我们可以通过分析这条边的两个端点的深度 哪个深度高 则断这条边的时候可以认为成断深度高的那个点 即输出当前点最小值我们可以将change的所有边从大到小排列 避免了pushup操作 直接覆盖即可代码#include <bits/stdc++.h>#define L u &l

2021-10-01 23:08:10 118 1

原创 P3038 [USACO11DEC]Grass Planting G

题目链接思路模板题 难点在于怎样将点权变为边权我们可以考虑这样的事情 对于树上除了根之外的所有点 都有入边仅为1 出边可能为多条 则我们可以将这条入边的边权转化到这个点上树链剖分之后得到区间 我们可以知道对于树询问路径最后一段询问中 u v所在的重链为同一条 所以在转化后这段区间是连续的 我们只需要把这棵子树的根节点去掉即可 即(id[v] + 1, id[u])代码#include <bits/stdc++.h>#define L u << 1#define R

2021-09-28 15:21:34 181

原创 P3514 [POI2011]LIZ-Lollipop

传送门题目思路题意为给定一个只有2和1的序列 给定m个询问 问哪个区间和为k(k为给定值) 输出左区间和右区间我们可以通过求和得出最大和 可以想出给定一个和n(n > 2) 我们一定能从区间中找出和为n-2的自区间如果两边任意一边的a为2我们可以删去一边得到 如果两边均为1则可以删去两边故我们可以求出区间最大奇数和和偶数和 通过递归来遍历所有可得到数的区间#include <bits/stdc++.h>using namespace std;const int N =

2021-09-23 17:10:39 137

原创 Acwing 2476. 树套树 (线段树+平衡树)

题目链接用线段树和平衡树来维护区间信息 线段树每个区间中都设有一个平衡树的根对于所有操作1.先找到所有[l, r]的整数区间 然后在这个区间中看看有多少大于x的数 用splay可以完成2.二分求值 每次对于mid 找一下区间大于它的数有多少个 与k相比再缩短区间3.在所有包含w[pos]的区间中改数4 5. 对于所有[l, r]区间进行get操作找最小或最大的相对于x的数字代码#include <iostream>#include <algorithm>#incl

2021-09-18 21:04:08 157

原创 Codeforces Global Round 16(A - E)

A. Median Maximization简单的贪心构造 题意让求中位数最大为多少 已知序列中所有数字均为非负 则我们可以让中位数之前的数全为0 然后中位数则可以最大取到总数除以剩下数向下取整代码#include <bits/stdc++.h> using namespace std; int n, s; void solve(){ cin >> n >> s; if (n % 2 == 1) { int m = n - n / 2;

2021-09-13 18:49:00 302

原创 Codeforces Round #741 (Div. 2)

有一说一这套题感觉有点差劲 打完之后感觉没有什么提高 全是结论题A. The Miracle and the Sleeper题意: 给出一个l, r区间从中要选择a和b 使得 a mod b 最大贪心 很容易的可以想到当l, r区间足够大的时候 b = a / 2 + 1 (a = r)的时候 a mod b取最大值 当l > r / 2 + 1的时候就b无法取到r / 2 + 1了 则直接r mod l 即可代码#include <bits/stdc++.h> #def

2021-08-27 20:11:51 189

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除