自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AcWing 843.BFS走迷宫

题目理解:宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。对比DFS:DFS也一定可以搜到,但不一定是最短路#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int N=110;int g[N]

2020-07-21 12:42:43 251 2

原创 AcWing 843. DFS

题目思路 对角线 dg[u+i]dg[u+i],反对角线udg[n−u+i]udg[n−u+i]中的下标 u+iu+i和 n−u+in−u+i 表示的是截距下面的(x,y)(x,y)相当于(u,i)(u,i)(1)反对角线 y=x+by=x+b, 截距 b=y−xb=y−x,因为我们要把 bb 当做数组下标,所以 bb 不能是负的,所以我们 +n+n,保证是结果是正的(2)而对角线 y=−x+by=−x+b, 截距是 b=y+xb=y+x,这里截距一定是正的,所以不需要加偏移量注:/

2020-07-13 17:45:51 175

原创 AcWing842.DFS

题目思路深度优先搜索算法(Depth First Search,简称DFS)一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。算法–回溯法一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而

2020-07-13 10:34:53 163

原创 AcWing 839.模拟堆

题目思路三个函数一个是数和节点的对应,交换节点,那么对应的数据结构所存储的数就要改变 并且涉及到交换了的节点其指针指向也要改变一个是上移节点对应的函数还有一个下移节点对应的函数代码#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int N = 1e5 + 10;int hp[N], ph[N];int h[N];in

2020-06-05 17:53:27 162

原创 AcWing 840.模拟散列表

题目思路在我们向该结构中插入或者搜索元素时,根据元素的关键码,通过某种函数去计算得到一个存储位置(哈希地址),然后直接用得到的位置来进行插入或者搜索等操作。这种方法就叫做哈希 Hash(散列),这个函数叫做哈希函数(HashFunc)。回顾单链表代码#include<iostream>#include<algorithm>#include<cstring>using namespace std;int const n=100003;int

2020-05-29 09:00:42 175

原创 AcWing 838.堆排序

题目思路(详细的看代码就好)代码#include<iostream>#include<algorithm>using namespace std;const int N = 100010;int h[N], mySize;int n, m;void down(int u)//u是根节点 t是最小节点{ int t = u; if (2 * u <= mySize && h[t] > h[2 * u]) /

2020-05-28 21:42:38 317

原创 AcWing 837.连通块中点的数量(并查集)

题目思路int siz[maxn];和上一个题几乎一样,就是多了个Q2操作,求这个点所在的连通块中的点的个数,所以只需要在上一次思路的基础上,另外开辟一个数组 siz[find(b)]+=siz[find(a)]; 这是更新连接后的集合的元素的个数,p[find(a)]=find(b);把b节点所在的树连接到a节点所在的树的根节点上代码#include<iostream>#include<algorithm>using namespace

2020-05-26 18:15:29 227

原创 AcWing 836.合并集合(并查集)

题目(并查集好像面试挺爱考的,代码短还有思维)思路if (p[a] != a) p[a] = find(p[a]);判断2个数是否属于同一个集合,只需要判断其根节点是否一样如果递归求根节点,会很慢,所以涉及了并查集的优化,如果不是根节点的话,可以直接一步求出根节点`p[find(a)] = find(b)表示, 将b节点连接在以a节点为根节点的树上代码#include <iostream>using namespace std;const int

2020-05-26 17:27:31 172

原创 AcWing 143.最大异或对

思路暴力=for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++) { // 但其实 a[i] ^ a[j] == a[j] ^ a[i] // 所以内层循环 j < i // 因为 a[i] ^ a[i] == 0 所以事先把返回值初始化成0 不用判断相等的情况 }}优化的算法首先要把题目中给的数,转化为2进制,然后建立Tire树2是010,那么找.

2020-05-25 22:20:21 132

原创 ACW 835. Trie字符串统计

题目思路Tire 树适合存储和查询字符串给每一个末尾节点打上标记,记录此节点出现了几次如果查询的字符串最后一个节点没有打标记,也就是不在Tire树的末尾,即使前面都匹配了,我们也认为不存在这个字符串注意int son[N][26]p,u可以当作开始节点和结束节点最多26种字母代码#include <iostream>using namespace std;const int N = 100010;//分别记录Tire树节点,//某个节点出现次数

2020-05-25 11:58:01 227

原创 AcWing 831. KMP字符串匹配

题目暴力在S内查找P如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置,则有:如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下一个字符;如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0。相当于每次匹配失败时,i 回溯,j 被置为0KMP 思路在S内查找P无论S是什么,P字符串都会存在一个next[]数组,记录最大前缀和后缀相等的字符个数然后比较S P时,发现S[7] 和 P[7]不一

2020-05-25 10:06:59 178

原创 AcWing 154.滑动窗口

题目思路(单调队列)求最大值时,如果,同一个窗口中,后面的元素小于前面的元素,则可以删去后面的元素那么最终得到的是单调递增数组若求最小值,也会得到一个单调队列,递减特别注意**队列元素的下标用数组表示, a[q[tt]] 中,q[tt] 表示队头在栈中的位置,然后a[q[tt]] 对头所指向的元素代表的数,代码# include <iostream>using namespace std;const int N = 1000010;int a[N],

2020-05-23 23:03:08 175

原创 AcWing 830.单调栈

题目思路假设2个数, x ,y数轴上 x 在 y 的左边 ( x < y)那么在某个数找左边第一个比它小的数时,一定是找到y, 所以此时 x 可以删去,无用重复上述操作,会得到一个单调栈原数据处理后注意tt是栈顶指针, 直到找到第一个比这个数小的数为止别忘了那个被寻找的数(栈顶那个数) 添加到栈里代码#include<iostream>using namespace std;const int N = 100010;int skt[

2020-05-22 16:31:46 152

原创 AcWing 829.模拟队列

题目补充STL 中队列的使用(queue)基本操作:push(x) 将x压入队列的末端pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值front() 返回第一个元素(队顶元素)back() 返回最后被压入的元素(队尾元素)empty() 当队列为空时,返回truesize() 返回队列的长度使用方法:#include <queue>1、普通声明queue <int> q;2、结构体struct node{

2020-05-21 12:02:28 215

原创 AcWing 828.模拟栈

题目思路栈是先进后出其实就是实现4个函数需要一个数组,和一个指向栈顶的指针心得上学期学过数据结构,所以还好理解但是不太会怎么把思路写下来代码#include<iostream>#include<cstring>using namespace std;const int N = 100010;int s[N], t;void push(int x){ s[++ t] = x;}void pop(){ t --;} vo

2020-05-20 09:58:34 148

原创 AcWing 827.双链表

题目思路插 入需要修改四个指针,且保存当前数// 语句的顺序不要写错了 导致指针指向错误 void add(int k, int x) { e[idx] = x;//存入这个点 r[idx] = r[k];//插入点的右指针指向原来k节点的右节点 (3) l[idx] = k;//插入点的左指针指向k节点 (1) l[r[k]] = idx;//原来k节点的右节点的左指针指向插入点 (4) r[k] = idx; //原来k节点的右指针指向插入点 (2)

2020-05-19 19:27:07 153

原创 AcWing 826.单链表

思路(1)数组实现链表,属于静态链表,快如果用指针实现链表,很多算法题会超时,慢(2)(3)一般插入(4)头结点插入(5)删除注意下标和位置关系, 下标0表示第一个点删除,如果只有一个元素的情况代码//数组实现链表,属于静态链表,快//如果用指针实现链表,很多算法题会超时,慢 #include<iostream>using namespace std;const int N = 100010;//头节点下标;节点的值//节点所指向下一

2020-05-18 13:53:45 214

原创 800 双指针求数组元素的目标和

题目想法双指针算法就是对一般的2重循环的一种优化,可以先写出原来的写法,时间复杂度是O(m * n )然后对其进行优化,改为一重循环,时间复杂度变成O(n+m)防止时间超时的问题思路指针变量i 从前往后,指针变量j 从后往前如果a[i] + b[j] > x, 我们就让j --,往前移动找到a[i] + b[j] == x, 输出就好(这个题规定只有一组符合要求)代码#include<iostream>using namespace std;con

2020-05-13 11:14:30 141

原创 799 双指针

题目思路双指针(不知道怎么写,看了模板,模板好厉害,)两个指针,变量i 和变量j 表示思路就是每次增加一个元素,然后找到重复元素,s[a[i]] > 1 表示有重复然后去掉重复元素 s[a[i]] --;然后我们移动前指针j j ++ 看以下i j之间的最大距离代码#include <iostream>using namespace std;const int N = 1e5 + 10;int a[N], s[N];int main(){

2020-05-12 21:15:43 123

原创 801 二进制中1的个数

题目学习了位运算, & 的用法思路位运算以下2步用于看一下第K位数先把第K位移到最后一位 n >> k看个位, x & 1这样如果我们先令K等于数的长度-1,然后依次输出第K位在二进制中的数,然后让K–(k>=0)这样我们就可以得到某个数的二进制表示了以10为例int x = 10;for(int k = 3; k >= 0; k--) cout << x & 1;代码#include<iostre

2020-05-11 13:20:35 182

原创 798 差分矩阵(二维数组差分)

题目思路代码假想有个差分数组,其前缀和就是元素组,这2个数组的值都可以认为是差分得到的画图分析加上减去了哪些部分只需要利用差分数组4个变量变化 省去了一一枚举//差分只需要考虑如何更新 不需要考虑如何构造 #include<iostream>using namespace std;const int N = 1010;int a[N][N], b[N][N]; void insert(int x1, int y1, int x2, int y2, int

2020-05-09 22:26:32 346

原创 797 差分

题目思路-(中间的某个特定区间增加某一常数)构造一个b数组,使得a数组每个元素是b数组相应元素的前缀和(差分是前缀和的逆运算)假设有数组b 如果 b[l] + c ,那么 前缀和a[l] 以后的每个元素都增加 c, 如果只想在特定,区间所有元素实现 增加一常数,只需要b[r+1] - c ,使得r之后的每个元素前缀和都减去c即可求原数组值 就是对差分数组求前缀和即可由于假定原数组全是0, 所以现有的a数组元素可以认为是差分得到的代码#include<iost

2020-05-08 21:45:55 197

原创 796 子矩阵的和(二维前缀和)

题目思路代码#include <iostream>using namespace std;const int N = 1010; int a[N][N]; int s[N][N];int main() { int n, m, q; cin >> n >> m >> q; for (int i =...

2020-05-08 11:05:16 168

原创 795 前缀和

题目思路前缀和 S[i] = a[1] + a[2] + … + a[i];S[i] = S[i-1] + a[i];作用:快速求一段数组的和代码#include<iostream>using namespace std;const int N = 100010;int n, m;int a[N], s[N];int main(){ sca...

2020-05-06 19:24:45 128

原创 794 高精度除法

题目思路真实的除法计算过程,(3步)函数有三个参数 (vector&A, int b, int &r)余数通过引用传回去掉前导0因为是倒着输出,并且正着计算,所以要先反过来代码#include<iostream>#include<vector> #include<algorithm>using namespac...

2020-05-06 08:00:50 177

原创 793 高精度乘法

题目思路把乘数b看作一个整体来和A中的每一位相乘保存的每一位 t += ( A[i] * b ) % 10进位 t = t / 10直到 t == 0 或者 A 每一位都乘完为止不要忘记 b 是0 的特殊情况代码#include<iostream>#include<vector> using namespace std;//高精度...

2020-05-04 19:56:03 158

原创 792 高精度减法

题目思路确保相减时,被减数大于等于减数 ( a - b >= 0 ) 如果前面数小,结果加上符号就行设置一个 变量记录进位情况对于结果为个位数,比如 123 - 120 = 003, 需要去掉前导0(需要实现2个函数)代码#include<iostream>#include<vector>using namespace std;//判...

2020-05-03 17:33:18 240

原创 791 高精度加法

题目思路并没有看起来那么简单,还是有很多注意事项的,思路就是每一位对应相加 ,取余后保存,然后要记录是否进位最后如果是1,再进一位看成字符串输入,然后存入数组对于高精度数,要存在数组里,一般用vector<>然后实际存入的时候,- ‘0’,存入数字相加,我们一般就是倒着存储,方便进位最后返回的结果也是存在vector里代码#inclu...

2020-05-01 22:30:06 106

原创 790 数的三次方跟

题目还是二分(double)保留6位小数,取 临界 1e-8mid ^ 3表示异或,mid * mid *mid 表示3 次方代码#include<iostream>using namespace std;int main(){ double x; cin >> x; double l = -10000, r = 10000; whi...

2020-04-30 09:10:18 136

原创 789 数的范围

问题这个题真的太坑了首先没看出来二分,也不会模板,就自己写自己的然后出现了运行正确但是提交超时错误,改了好多遍没改好边界边界边界边界!! !思路二分代码#include <iostream>using namespace std;const int N = 1e5 + 10;int a[N];int n, m;int main...

2020-04-28 23:49:16 358

原创 787 归并排序

题目确定临界点—就是中间元素左右两边各自排序(调用归并函数)具体归并排序(双指针移动)归并过程把原数组一分为二,两两比较,最小的放入临时数组临时数组元素存回原数组注意需要辅助空间注意特殊情况l 一开始是 0, 具体归并时,把 l 赋值给 i 并且 i不断移动i = l 不是1代码#include<iostream>using nam...

2020-04-27 15:17:30 90

原创 785 快速排序

题目遇到的问题不知道模板一开始,自己按照一直传统算法写,现在学会了模板。边界问题 一开始的时候 x 取 l + r >> 1, 不要取 x = l 会陷入死循环超时!!注意只含有0或1个元素情况步骤确定临界(不要陷入死循环 超时)改变移动区间递归代码#include<iostream>using namespace std;...

2020-04-27 00:32:44 102

原创 扫雷--全局搜索(1)

分析这个题错在了输入上,二维字符数组按行输入,不是单个字符输入。直接用’?'就行,不需要再设置bool数组,转为成true false。两个字符数组 number = char + ‘0’代码#include <iostream> using namespace std; const int n = 110;const int m = 110;char mp...

2020-04-23 12:18:51 148

原创 纪念品分组--简单排序和贪心(2)

题目思路就是简单排序,但要注意一下没有组成2个的单独讨论注意的点就是先输入N 然后定义数组已经不适用了bool 数组标记有没有选择过== 与 =#include<iostream>#include<algorithm>using namespace std;const int N = 30010;int a[N]; bool b[N];in...

2020-04-22 18:23:36 150

原创 安装tensorflow2.0的坑

报错1版本问题,tensorflow支持的Python版本最高为3.6的,3.7的不支持,需要卸载安装在tensorflow环境下的Python3.7。在anaconda安装目录下,G:\softs\Anaconda\envs\tensorflow.备份好tensorflow,把Anaconda目录下的envs给删了,后面再重新输入conda info --envs 发现,程序不会出现t...

2020-04-22 09:40:17 798

原创 Android--错误分析

今天敲Android第五章代码,遇到了很多错误,主要是rename in files原因:缺少了R.java文件解决:从其他project中复制一个到gen下就好了找不到可用的AVD[No active compatible AVD’s or devices found]原因:AVD或设备的固件低于当前应用的target解决:最简单方法修改清单文件中sdkversion下...

2020-04-21 00:51:14 79

原创 导弹拦截--排序和枚举(1)

思路计算每个点距离系统1的距离并排序。从距离系统1远的点开始,计算该点距离系统2 的距离。如果距离系统2更近,记录该导弹的下标(就是距离系统1距离比该导弹小的导弹都归系统1,我们倒着枚举,求最小临界下标)。临界下标设i ,即1~i+1导弹都由系统1拦截,剩下的系统2。求出两系统最远距离的平方和就是答案。#include<iostream> #include<alg...

2020-04-21 00:37:23 145

原创 星际旅行--枚举和暴力(2)

link依次遍历两个数组,找相等元素下标并记录最大值,加一即可。for 循环执行过程break只对最近的循环起作用#include<stdio.h>int main(){ int i,s=0,a,n,x[2501],y[2501]; scanf("%d",&n); for(i=1;i<=n;i++) { sc...

2020-04-19 00:27:38 93

原创 两条公路--枚举和暴力(1)

直线的平移 y = x + b 或者 y = -x + b ,这里 b 的范围不好确定,所以 所以 应该用 try2 而不是 try1。try 2sum 记录每种情况的做大值 。max 记录平移(所有情况)最大值。#include<stdio.h>int x[1001],y[1001],i,j,m,n,b1,b2,sum,max=0;int main(){ s...

2020-04-16 23:55:20 152

原创 NOIP-2018-1

今天先整理一半,有的题没看完。T 9给定一个含N 个不相同数字的数组,在最坏情况下,找出其中最大或最小的数,至少需要 N - 1 次比较操作。则最坏情况下,在该数组中同时找最大与最小的数至少需要( )次比较操作。(⌈ ⌉表示向上取整,⌊ ⌋表示向下取整)解:假设有数组A[n],,现先判断A[0]与 A[1]大小,求Max、Min。之后每两个元素一组,先组内判断大小,大的再和Max比较...

2020-04-01 22:50:35 1760

空空如也

空空如也

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

TA关注的人

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