自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 彻底地删除垃圾软件

1,当不小心下载了垃圾软件,想删除掉,但是又删不掉,或者是删不干净的一些办法。首先,我们应该把软件关掉,让它停止运行。然后找到软件所在的文件夹,把一些能够删除的文件都删除掉。...

2021-10-08 19:03:00 4318

原创 并查集 判断无向图是否有环

无向图中,给定一些边,然后判断这些边组成的图是否有环。注意这个方法必须保证没有输入重边对于一条边用(a, b)表示,然后把a,b加入到并查集中。如果又加入了一条边(b ,c) ,那么如果这个时候又需要加入一条边(c, a)就会被判定为有环(a, b, c形成了环)。并查集中,可以得到a,c在同一个集合中。就可以判断,有没有形成环。模板题题意:判断一个无向图是不是存在环,输入包含多组数据,每组数据是一个以0 0结尾的整数对列表,表示了一条通道连接的两个点的编号。点的编号至少为1,且不超过1

2020-12-19 16:21:41 1029 1

原创 字符的最少变换次数,并查集

题意:给两个字符串a, b。a合和b中的字符都是前20个字母(a~t),a需要进行一些变换,使得a等于b。对于每一次变换:选取a中相同的字符,然后把它们用同一个字符替换,并且替换的字符必须比原来的字符大。问最少需要多少次操作,才能使得a等于b?如果不能相等,输出-1.题目链接题解:很容易想到,a中只要有一个对应的字符比b大,那么就直接输出-1。这个题应该用并查集做,或者是贪心。反正只要20个字母,都是从一种字母变换到另一种字母。那么就把字母连接起来, 让它们的父节点相同,表示

2020-12-19 15:33:31 546 1

原创 删除文件后,pycharm无法启动

我把D盘里面的一些看起来很没有用的文件和文件夹删了,然后发现pycharm无法打开。。。以前我装pycharm的时候,放了一个奇怪的文件在一个名叫test的文件夹里,xxx.jar什么的,我以为没有用了,就删除了。结果,pycharm就打不开了,以前pycharm用的挺好的,把它删了,直接启动都启动不了了。test文件夹里面的内容:在回收站里把它恢复了,pycharm就能启动了,而且还不能够修改它的名称,这个路径必须和原来的一样。、如果把test文件夹重命名,pycharm也启动不了

2020-11-28 10:33:26 807

原创 中位数的和,cf1440B

题意:有n*k个数,它们是从小到大排列的,把它们分成k组,每组n个,然后找出每组的中位数,这题的中位数是的定义是,,问所有的中位数加起来,最大值是多少?题目链接思路:这题我想了好久,其实就是找最大的数,每次都找最大的数,合法的最大的数。每一组的中位数,比它大的数的个数:,我们不需要去关心比中位数小的数,反正总能找到。于是就从后往前一直加上和法的最大值就行了。#pragma warning(disable:4996)#include<iostream>#include

2020-11-18 20:25:34 206

原创 dp, LCS的变种

题意:题目链接给两个字符串s1, s2,分别取出它们的一个子串,st1, st2 对这两个子串求一个值, 问最大的值是多少。题解:LCS中,dp[i][j]表示以i, j结尾的最长公共子序列。现在的最大问题就是子串怎么求这个值,不可能把所有的子串都找出来。需要把LCS转变一下,让dp[i][j]的值等于以i,j结尾的字符串的,这个值的最大值。状态转移方程就变成了:if(s1[i]==s2[j])dp[i][j] = max(dp[i][j], dp[i-1][j-1] + 2), e

2020-11-17 19:49:43 168

原创 求对应的数,所有绝对值之差的和

题意:题目链接有2n个数,需要把他们分解成两堆,每一堆选取n个数, 总共有种方式。对于每一种方式第一堆从小到大排序,第二堆从大到小排序。 求sum=问所有的方式的sum之和是多少。思路:首先,有一个规律,无论怎么分组,sum值都是固定的。这个需要仔细观察。如果不知道这个规律,这个题就不知道怎么做了。把sum值求出来,然后乘上方式的总数就行了。求组合数需要逆元,不能直接除。#pragma warning(disable:4996)#include<iostream>

2020-11-14 16:58:21 580

原创 分解质因数cf1445

题意:给出两个数p和q。求最大的x, 使得p%x==0 && q %x !=0思路:如果p%q!=0, x就是p。如果p % q ==0。那么q是p的因子,q的因子都是p的因子。q可以表示为, ci是质因数,p也一样。x只需要有一个质因子和q不同就行了。求最大的x,就先让x等于p, 然后一直去除以q的质因子,直到x不能整除q,取最大值。#pragma warning(disable:4996)#include<iostream>#includ

2020-11-14 15:04:18 744

原创 插入最少的字符,构造回文串

题目:题目链接给一个字符串,在任意的位置插入一些字符,使得这个字符串成为回文串,最少需要插入多少个字符。ps:有一个和这个题很像的题,都是插入最少的字符构造回文串, 但那个题是在字符串的尾部或者头部插入,而不是任意的位置。那个题可以用kmp做,也可以用马拉车做。以前写过在任意的位置插入,就是把这个字符串反转,求反转的和原来的字符串 最长公共子序列。然后答案就是长度减去LCSdp求LCS#pragma warning(disable:4996)#include<iostrea

2020-11-12 21:34:37 1311

原创 概率dp入门 求期望

题意:有n类bug, s种系统,每个bug可以属于一种系统,一类bug。每天可以找到一个新的bug,这个bug属于每一类bug的概率相同都是,属于每一种系统的概率也是相同的,都是。那么要使得每一类bug都至少有一个bug,每一个系统也至少有一个bug,所需要的天数的期望是多少。思路:考虑如果没有s种系统,只需要找到n类不同的bug,那么就非常的简单,这个期望就是n对于概率dp都是倒着推导的,dp[i][j]代表已经找到了i类bug,j种系统,需要的期望。很明显dp[n][s] .

2020-11-11 21:00:50 309

原创 区间dp 石子合并&矩阵链乘法

石子合并有n堆石子围成一个圈,每一堆石子可以和相邻的一堆合并得到新的一堆,所得的分数是新的一堆的数量。所有的石子合并成一堆后,最大的分数,最小的分数是多少。思路:这是一个环,需要拆分成链,把这n堆,复制一遍,变成2n堆。dp的时候还是得保证长度为n。dp_min[i][j]表示合并i~j这个区间所得到的最小的分数。状态转移:dp_min[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + a[j] - a[i-1])a数组是前缀和.

2020-11-10 17:40:04 178

原创 贪心-线段&区间覆盖

1 给出一些线段,代表着一些区间,需要尽量多地选出一些线段,并且使得这些线段没有重叠。思路:按照区间的右端点从小到大排序,如果下一个区间和当前区间没有交点,即左端点大于等于当前区间的右端点,ans++, 更新当前区间。 sort(v,v+n,cmp); x=v[0].e; for(i=1; i<n; i++) { if(v[i].s>x) { sum++.

2020-11-09 20:26:05 333

原创 高精度&dp

题意:给定的n×m的矩阵,矩阵中的每个元素a_{i,j}ai,j​均为非负整数每次取数时须从每行各取走一个元素,共nn个。经过mm次后取完矩阵内所有元素; 每次取走的各个元素只能是该元素所在行的行首或行尾; 每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值\times 2^i×2i,其中ii表示第ii次取数(从11开始编号); 游戏结束总得分为mm次取数得分之和。1≤n,m≤80。题目链接思路:需要高精度算法,贴了个模...

2020-11-08 10:12:27 228

原创 求两个字符串的LCS(最长公共子串)后缀数组

题意:给两个字符串,求出它们的最长公共子串的长度。比如yeshowmuchiloveyoumydearmotherreallyicannotbelieveityeaphowmuchiloveyoumydearmother它们的最长公共子串为howmuchiloveyoumydearmother,一共有27个字符。题解:没有什么好说的,后缀数组模板题,会求后缀数组sa和height数组就行。height[i]是排名为i的后缀和排名为i-1的后缀的最长公共前缀。那么只需要找.

2020-10-26 11:01:03 455

原创 数学知识,数论

1不能用费马小定理求逆元有公式 a / b % mod = a %(mod * b)/b2 递归求逆元mod必须为素数LL inv(LL i)//mod必须是素数{ if(i==1)return 1; return (mod-mod/i)*inv(mod%i)%mod;}

2020-10-16 21:32:34 155 2

原创 模板

1点分治//给一棵树,每条边有权。求一条简单路径,权值和等于 kk,且边的数量最小。//第一行包含两个整数 n,k,表示树的大小与要求找到的路径的边权和。//接下来的n-1行,每行三个整数u, v, w。两个点,和它们的边权#include<iostream>#include<algorithm>#include<cstdio>#include<map>#include<cmath>#include<vector&gt

2020-10-10 09:22:39 119

原创 C++ 小知识

1.输入一串空格隔开的单词,必须要用string的时候,用getline输入,然后把它们分开。方法:istringstream函数#include<sstream>//istringstream函数的头文件vector<string>s1, s2, s3;string str1, str2, temp; getline(cin, str1); getline(cin, str2);//读入 istringstream Str1(str1), Str2(str.

2020-10-03 11:54:56 318

原创 约瑟夫环,递归

约瑟夫环n个人, 从1到n开始编号,每次数到m,就把那个人去掉。问最后的那个人是谁#pragma warning(disable:4996)#include<iostream>#include<algorithm>#include<cstdio>#include<map>#include<set>#include<cmath>#include<ctime>#include<vector&g

2020-10-01 16:01:06 132

原创 求Miu函数, 找规律

题意:题目链接思路:找出规律, 当k较大的时候, 是循环的。只需要求出前几个数就可以了。首先打表,求出1e7的miu函数, 必须要用线性筛,不然超时。#pragma warning(disable:4996)#include<iostream>#include<algorithm>#include<cstdio>#include<map>#include<cmath>#include<vector>

2020-09-27 09:57:38 675

原创 python爬虫 零碎知识

1。headers。 使用chrome的代理,User-Agent。随便找个页面, 按F12, 选择Network,刷新一下, 然后随便选择一个什么东西,点headers, 然后在最下面就可以看见User-Agent,然后复制一下就可以了,不需要记住。...

2020-09-25 10:09:49 175

原创 树上边的被经过次数

题意:题目链接一棵树,给出n-1条边,为每条边分配一个值,满足三个条件,1:所有的边权值乘起来等于一个数k,2:边权值都大于03:边权值中1出现的次数最少。 这棵树的两个结点之间的路径上的边权之和为x, 求出所有的x之和的最大值。k是一个很大的数,所以把它的所有质因子给出,质因子可能是重复的。比如 4的质因子是2, 会给出两个2。思路:求所有两点之间的路径上的边权和最大值。就是找出边的被经过次数,然后以这个次数为权值,来分配边权值。被经过次数越多,就分配更大的边权。如果质因...

2020-09-23 09:44:54 284

原创 经过树上最多的空白结点

题意:题目链接

2020-09-23 09:02:08 87

原创 置换群和循环节

题意:题目链接一个排列A(1,2,3.。。。n)经过一个置换p变换k次后得到一个排列B。求A经过一次变换后的结果。思路:这个题需要知道置换群和循环节的一些概念。什么是循环节。。比如1 2 3 4 5 从上向下看4 1 5 2 31->4->2->1 (1,4,2)为一个循环节,长度为3 3->5->3(3,5)为一个循环节,长度为2 当置换的次数为循环节长度的时候,相当于没有变化。设循环节的长度为r, ...

2020-07-15 10:23:33 851 2

原创 c++ String插入字符,结构体排序

题意:题目链接洛谷的一个后缀数组模板题,就是对一个字符串的所有后缀进行排序。思路:我的错误方法,MLE了,正确的应该就是用后缀数组做,写个模板就行。我想的是用String把所有后缀写出来,使用insert(pos, num, chr)(位置,个数,字符)函数插入字符,好像这样才不会re,也许有其他更好的方法。然后,定义cmp函数,对结构体数组排序。#pragma warning(disable:4996)#include<iostream>#include&l.

2020-07-13 09:46:00 332

原创 树的结点的距离LCA

题意:题目链接给出一个树,有n个结点,n-1条边。给出边的权值。求两个结点的路径上权值之和,保证只有一条路径。并且不能经过一个点两次。思路: 倍增求LCA,模板题。讲解倍增求LCA的博客先dfs,然后LCA。dfs的时候需要更新dis数组。#pragma warning(disable:4996)#include<iostream>#include<cstdio>#include<vector>#include<queu...

2020-07-10 18:42:03 345

原创 模的顺序,计数

题意:题目链接给两个数a, b然后询问q次。每次询问给出一个区间l, r。区间内的数x, 如果x%a%b!=x%b%a, 也就是先模a还是先模b的结果不同,那么x就是符合条件的数,计算区间内的符合条件的数的个数。思路:这个题的l,r区间范围是1e18,不可能遍历。只能用去找公式或者是找规律。a和b的最小公倍数就是一个周期。因为a和b的范围小,所以可以暴力找出最小公倍数或者a*b内的所有符合条件的数。然后再算出l,r区间内的数。还有一个规律:取mx为a,b中的较大数,lcm是...

2020-07-10 10:00:56 162

原创 取三个数,方差最小。

题意:题目链接有三个数组,a,b,c。从三个数组中,分别取出一个数,得到的三个数x, y, z,使得(x-y)^2+(x-z)^2 + (y-z)^2最小。输入:样例个数T,三个数组的大小,na,nb,nc。之后三行是桑数组的元素。思路:对三个数组进行排序,然后进行依次的遍历。但是不是暴力的遍历,暴力肯定会超时。因为每次必须从三个数组中分别取出一个,所以,设a,b,c三个数组的当前元素的下标为i, j, k,枚举三种情况,i+1, j+1, k+1.算出最小值,然后更新最终答案。..

2020-07-09 14:29:50 878

原创 和不为0的子数组个数

题意:题目链接给一个数组,求它的子数组x,x的所有的子数组的和都不为0。输出x的个数, 子数组是原数组的子集,但是不能改变原数组的顺序。思路: 这个题应该是用前缀和做,但是需要计数,计数就是最重要的事情。用一个map记录前缀和出现的最右位置。只要一个区间和为0了,那么这个区间后面的数,就肯定不行了。所有只需要考虑前面的。如果有前缀和已经出现过了,那么就说明区间的和为0了。用L表示最右的左边界,每次计算需要增加的数(i-L)就可以了。#pragma warning(...

2020-07-08 10:59:04 655

原创 连乘积&模

题意: n个数,把第i个数和第j个数之差的绝对值相乘, 1<= i<j <=n, 取模m。n在1e5的范围内,m在1000的范围内。题目链接思路: 当n大于m的时候,肯定会有两个数与m同余,也就是说这两个数相减后%m肯定是0当n小于等于m的时候,直接暴力。#pragma warning(disable:4996)#include<iostream>#include<cstring>#include<cstdio&...

2020-06-01 16:22:11 636

原创 组合不重复数字

题意: 有两个数组,数组中的元素都是不同的。分别从两个数组中挑一个数字, 然后相加,组合成新的数字,所有新组成数字也不能有相同的。题目链接思路: 组成不同数字的题。 先分别排序,然后依次对应相加。就肯定不会有一样的数字。#pragma warning(disable:4996)#include<iostream>#include<cstring>#include<cstdio>#include<set>#i...

2020-06-01 16:03:56 716

原创 构造最长上升子序列

题意: 需要构造一个由从1到n的数字组成的序列,并且给出一个字符串,由'>',和 ‘<’组成,第i个字符表示第i个数字和第i+1个数字的大小关系,字符串长度是n-1, 所构成的序列需要满足大小关系。输出两个序列,第一个序列要使最长上升子序列的长度最短,第二个序列要让长度最长。题目链接思路: 让最长上升子序列长度最长,就是让序列整体呈现出上升的趋势,所以把序列初始化为从1到n的序列,然后再根据大小关系用reverse函数进行调整。#pragma warnin...

2020-05-31 22:08:50 330

原创 构造最长回文串

题意: 有n个长度为m的字符串, 把它们拼接在一起, 输出可能的最长回文串。题目链接思路: 用map记录字符串的个数,使用reverse函数得到它翻转之后的字符串,如果有反转后的字符串,就把它在最前拼面和最后面拼接上。用string的‘+’运算进行拼接。如果是单独的一个字符串,但是它是回文的,就把已经得到的字符串分成两半,还是要用string的'+"运算,因为确定长度的string访问下标会出错。#pragma warning(disable:4996)#incl...

2020-05-31 21:56:42 365

原创 字符串子序列得到另一个字符串

题意: 一个字符串s,一个字符串t,长度小于等于1e5, 还有一个空字符串z,每次从s中取出s的一些子序列。然后把它们加入到z中。求使得z和t相同的最小的操作次数。如果不能使z和t相同。输出-1。题目链接思路: 用vector的数组,来保存二十六个字母在s中出现的位置。也就是把位置加入到相应的数组中,用ascii码来表示字母。这样就可以访问下标了。然后遍历t字符串,对于每个字母,用二分查找位置。(同时记录上一个字母的位置,当前的位置不能比上一个字母的位置小,因为子序列顺序不能乱...

2020-05-29 17:16:24 308

原创 0和1的个数之差

题意: 一个由0和1组成的字符串s,长度小于等于1e5,它可以构成字符串t, t=sssss....,t是无限长的。在t的前缀中(空串也是前缀)找出0的个数和1的个数之差(个数差记为d)为x的前缀,输出个数。x是在-1e9~1e9范围内。如果有无穷个则输出-1。思路: 首先考虑特殊情况。前缀个数为0的时候,是在s中不存在个数差d等于x的前缀,并且s中0和1的个数相同。无穷个是s中存在个数差d等于x的前缀,且s中0和1的个数相同。对于一般的情况,用map记录下所有前缀的个数差d的...

2020-05-29 11:10:44 628

原创 好子串的个数(计数)

题意: 一个由01组成的字符串,如果它的子串的长度等于这个子串转换成10进制的值,那么这个子串就是好子串。输出好子串的个数。所有子串的长度小于2e5题目链接思路: 2e5的数据,小于2的30次方。从左到右遍历,遇到1的时候,往后遍历30个字符,记录数值,判断数值是否小于可能的最大长度。只要小于等于就可以,因为前导零不会增加数值。 #pragma warning(disable:4996)#include<iostream>#include&...

2020-05-28 17:32:08 879

原创 得到至少k个相同的数

题意: 给一个长度为n(<=2e5)的序列,可以进行操作,每次可以对一个元素除以二向下取整。需要得到至少k(<=n)个相同的数,可以把这些数全部变成零,所以肯定有解。问至少需要多少次操作。思路: 因为是除以二向下取整,所以不会出现超过2e5的数,对原数组的每一个数进行操作,把这个数可能得到的所有数(包括它自己)和与之对应的操作次数记录下来。然后从0到2e5,进行枚举。并且更新答案,找出最小值。#pragma warning(disable:4996)#in...

2020-05-27 21:44:54 336

原创 灯的亮灭问题 枚举

题意 :给你 N 灯泡的初始状态(开或者关),然后对于每一个灯泡,给出两个值 a,b; a 代表快关状态切换的周期,b代表第一次切换的时刻。即在b, b +a, b+2*a的时候,状态会改变。问在某一时刻,能够同时亮的灯泡数目的最大值。题目链接思路: 枚举每一秒的灯的状态,然后更新最大值。但是,枚举多少秒钟才够,我不知道。反正数据小,只要不超时,往大的整就行。如果数据比较大的话,就需要用另外的方法了 #pragma warning(disable:4996)...

2020-05-26 17:51:28 322

原创 差分题

题意: 港口有n堆货物,他们的重量分别为w1,w2,...wn,每堆货物的重量不一定相同。吊车师傅每次操作可以使任意第i堆到第j堆的货物都增加一个重量或者减少一个重量。请问吊车师傅最少需要执行几次操作可以使n堆货物重量都相同。题的链接思路: 使得n堆货物都相同,就是让差分数组除了第一个元素,都为零。让i~j的元素都加上1,就是差分数组第i个元素加一,第 j+1 个元素减一。让i~j个元素都减一,则相反。 让差分数组除第一个元素外,所有的元素都为零,就是对差分数组每...

2020-05-26 11:49:19 426

原创 python 最近对问题图像(分治法)

分治法解决最近对问题,按照x坐标分成两堆,mid是最大的x值的下标加上最小的x值的下标除以二,不断递归,直到只有两个或者三个点。两个点或者三个点能够直接处理。然后就是合并,先分别求出左右两堆的最近对,然后让较小的那个距离赋值给d, 以mid为中心,在mid-d和mid+d的范围内找点,因为只有在这个范围内才可能出现比d小的最近距离。找到了就更新d的值。画图比较简单,画个散点图和一条直线就好了。...

2020-03-10 08:24:57 814

原创 python Graham求凸包问题并画图

python写Graham没有c++那么好写,但是python画图简单。只需要用matplotlib里的pyplot,c++画图太难了。Graham算法写起来比较简单,只需要想办法对最小点和其他的点所连成的直线,与x轴正半轴的夹角进行排序,然后其他的就直接套用Graham算法模板就好了,因为c++可以重载排序函数sort,不用计算角度(用其他的数学方法),但是python不行(也许是我不知道而...

2020-03-03 15:11:23 630 2

空空如也

空空如也

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

TA关注的人

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