自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 (AcWing 4440. 照相,408操作系统-进程的通信,fast r-cnn和faster r-cnn的初步理解)

管道通信发送进程向管道中写入信息,接收进程读取信息,读信息一般比写入信息更快,当管道为空时,读进程会进入阻塞态,直到管道中有数据,唤醒读进程。可以知道的是,分别有G、H字符,因为是偶数前缀反转,并且我们的目的是将奇数位的G反转到偶数位上,于是我们可以将N个字符看作是N/2个字符串,可能出现的字符序列GH、HG、HH、GG。这里解释一下反转的意思,就像是题目举出的14字符的例子,我原以为是将前六个字符的G、H反转,即G变为H,H变为G,后来发现是将前六个字符串倒过来,也就是顺序反转。使用发送原语和接收原语。

2023-07-13 22:06:11 142

原创 学习记录21

上午根据题意可以看出,此题用floyd就可以了。Floyd是用来求每个点之间的最短路径,尽管时间复杂度有些高,但在这一题中是完全可以满足的了。代码如下:#include <bits/stdc++.h>using namespace std;int n,m,v,s;const long long int inf=1e9+5;int low[110][110];void floyd(){ for(int i=1;i<=n;i++) for(int.

2022-02-22 16:42:54 684

原创 学习记录20

写题,到目前为之最短路的题只写了一个,急,很急。对于最短路还是没太多的认识和理解,写这题有点麻,最后用dp写的。题目中的最少租金这四个字就已经勾起了“背包”这两个字,我最开始一想,dp无疑了。就是最开始对于那个所谓的“半矩阵”搞不太清楚,都不太理解这几个数代表着什么……我们将dp[i]设定的意义为游艇出租站i到游艇出租站n的最少租金。dp定义好就开始根据初始值一步步推出答案。实现的代码如下:#include <cstdio>#include <iostream&gt

2022-02-15 10:45:40 473

原创 学习记录19

上午写最后一道题:现在大概能懂一些了。我们使用kmp匹配做出这一题。实现代码如下:#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;#define ull unsigned long long intint ani,kmp[1000010];char a[1000010],an[100

2022-02-13 19:24:37 261

原创 学习记录18

上午题目如下:kmp的模板题,因为next数组的值没有设定好,导致求最长border的时候出现问题。后来修改了next的值的初始设定,然后所谓的border就是直接输出next数组里的值就好了。就像之前说过的,kmp利用字符串的对称性来节省时间复杂度,next数组中的值其实就是当两字符串进行字符匹配的时候,如果失配了,该从哪个下标位置重新开始匹配。而我们的next值是根据i字符前所构成的字符串中前后缀相同的个数,比如:abab,此时next[4]=2(下标从0开始)。使用kmp的话,当abab后

2022-02-13 10:34:11 228

原创 学习记录17

惭愧,折腾了一天的KMP,写了个模板题,这题写详细些好了。题目如下:首先我们要知道KMP是怎么用的,是干些什么的。KMP主要适用于字符串的匹配,就是上面的这题,当我们需要在两个字符串之间进行判断是否另一方在主串中出现时,一旦字符的长度大了起来,使用朴素算法的话就会显得时间复杂度过大,于是在前人的研究下,我们得到了如今的KMP。因为KMP是利用字符串的对称性来节省时间复杂度的,我们将子串以相同的前后缀个数来编出另一个整型数组,此前后缀个数也是字符串中非重复字符的下标位置。借由这个数组我们可以节

2022-02-09 22:49:54 545

原创 学习记录16

上午开始写hash的题目,最开始是这个:最开始写出来会出现时间超限的情况,因为我没有用hash的方法,只是直接写出解决方法。这是看了下题解的做法。双指针法,用两个变量表示两个下标位置。关键的是我们要知道,如果我们把数组从小到大排序起来,当到达一个减去数组中的最前方(后面会改变位置)数后<c的元素再之后的元素,再从头一个个找,找到一个减去N[i]>c的第一个元素,此两个数之间的元素一定是符合题目要求的。大概有点拗口了,理解就好了。#include <iostream>

2022-02-08 21:56:34 374

原创 学习记录15

上午写5个题解,分别是“P1177 【模板】快速排序”、“P1111 修复公路”、“P2078 朋友”、“P1455 搭配购买”和’P1551 亲戚”。哦对了,这是一天的量。不想分散了,就写上午了。还看了《大话数据结构》里关于“图”的内容,没看完,不过也算了解了一些。下午复习了一下“二叉树”的知识内容,之前没有看树就直接看来二叉树了,这次把树看了一遍,还行,不难理解。然后就开始了2小时的周测……心碎时间开启……晚上开始了一周一次的答辩环节,我们讲了讲一周写的题和学了的知识点,师傅

2022-01-23 21:06:51 55

原创 P1177 【模板】快速排序

首先,我们需要知道快速排序的理论知识。快速排序,又名快排,嗯,具体实现是从以数组中第一个数据为基点,然后首先以数组的右边开始(至于为什么是从右边开始,后面会提)寻找比此基点小的(看你的需求,如果是要从小到大的话,就是从右边找比基点小的)数,然后退出来,再从数组最左边开始找,找比基点大的,我们这样一直递归下去,因为我们想要达到的是数组左边的数据都是比基点小右边都是比基点大的,最后把基点放入左右边的中点。随着递归的一点点深入,分割的数目也越来越少,这就达成了一个排序的效果。为什么要从右边开始寻找呢,...

2022-01-23 20:41:49 415

原创 P1111 修复公路

这一题主要的问题是,如何判断一个时间是可以让所有的村庄都互通的。我们可以知道的是,这样的时间一定是修复某个桥的时间,最多也就是花费时间最长的那个,因为我们是可以同时修补所有的桥的。我们可以使用结构体数组记录这三个数据,然后按照时间从小到大给他们排序,那么第一个满足所有村庄互通的时间就是所谓”最早时间”。那么怎么判断那个时间是可以让所有村庄互通的呢?我们设一个循环,每次循环在结构体数组中取出此道路修补需要的时间,然后再设一个循环,此循环中,我们开始建树,并且以上一个循环中取出的时间为时间限制,修补不...

2022-01-23 10:59:00 258

原创 P2078 朋友

我们计算出与小明是朋友的人的个数,再计算小红的,可以知道的是如果人数不一致,那么数目小的那个就是可组成一对的个数。依旧是并查集,因为有小明和小红两人,所以我们可以设立两个并查集数组。其他的就是普通的并查集建立了。代码如下:#include <stdio.h>#include <string.h>int pre[30000],pre1[30000];int fini(int t,int x)//并查集合并,因为我要建立两个并查集,所以我用t来把它们区分开{ ...

2022-01-23 10:22:59 225

原创 P1455 搭配购买

依旧是并查集为主,这一题我们还需要注意的是“尽量多价值的云”和“一些云朵是搭配买的”,一看到“尽量多价值的云”我们就应该能想到01背包问题,毕竟一般求局限内的最高什么什么值都是关于背包问题的。对于“一些云朵是搭配买的”,我们可以在把他们的总共所需钱放在他们的“根节点”中,然后需要注意的是,在把价钱加入根节点里后,自己节点里的值需要清零,不然的话,背包问题就不容易实现了。代码如下:#include <stdio.h>#include <string.h>int ...

2022-01-23 10:13:52 359

原创 P1551 亲戚

典型的并查集吧,将属于亲戚的放入一个“集合”中,也就是把他们全都放进同一个树里,最后要是想判断他们是否是亲戚的话,就去找他们的根节点,如果根节点相同,也就是处于同一棵树中,那么他们就是亲戚关系。注释中有详细解释。代码实现如下:#include <iostream>#include <cstring>using namespace std;int pre[10000];int findi(int x)//这个函数的作用是找出x的根节点{ if(pr...

2022-01-23 09:54:40 276

原创 学习记录14

上午写出一个题:题目描述给出每个节点的两个儿子节点,建立一棵二叉树(根节点为 11),如果是叶子节点,则输入0 0。建好树后希望知道这棵二叉树的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。最多有 10^6106 个结点。输入格式无输出格式无输入输出样例输入 #172 73 64 50 00 00 00 0输出 #14通过的代码是:#include <stdio.h>#include <std

2022-01-23 09:45:28 148

原创 P3367 【模板】并查集

题目描述如题,现在有一个并查集,你需要完成合并和查询操作。输入格式第一行包含两个整数N,M ,表示共有 N 个元素和 M 个操作。接下来 M 行,每行包含三个整数 Zi​,Xi​,Yi​ 。当 Zi​=1 时,将 Xi​ 与 Yi​ 所在的集合合并。当 Zi​=2 时,输出 Xi​ 与 Yi​ 是否在同一集合内,是的输出 Y ;否则输出 N 。输出格式对于每一个 Zi​=2 的操作,都有一行输出,每行包含一个大写字母,为 Y 或者 N 。输入输出样例输入 #1复制

2022-01-21 16:26:13 477

原创 P1229 遍历问题

题目描述我们都很熟悉二叉树的前序、中序、后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历。然而给定一棵二叉树的前序和后序遍历,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树:所有这些二叉树都有着相同的前序遍历和后序遍历,但中序遍历却不相同。输入格式输A数据共两行,第一行表示该二叉树的前序遍历结果s1,第二行表示该二叉树的后序遍历结果s2。输出可能的中序遍历序列的总数,结果

2022-01-21 16:04:02 123

原创 P4913 【深基16.例3】二叉树深度

题目描述给出每个节点的两个儿子节点,建立一棵二叉树(根节点为 1),如果是叶子节点,则输入0 0。建好树后希望知道这棵二叉树的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。最多有 10^6 个结点。输入格式无输出格式无输入输出样例输入 #172 73 64 50 00 00 00 0输出 #14建树也有一个技巧,我们可以使用结构体数组分别存储左右节点,因为这样刚好符合题意,第一个节点收第一行的左右子树,即下标为1的结构体数组,以

2022-01-21 15:29:23 412

原创 P1030 [NOIP2001 普及组] 求先序排列

题目描述给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度≤8)。输入格式2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。输出格式1行,表示一棵二叉树的先序。输入输出样例输入 #1BADCBDCA输出 #1ABCD首先我们可以知道的是,后序遍历序列的最后一位一定是根节点,即先序遍历序列的第一位,然后我们可以知道的一个抽象特性是“后序遍历序列的最后一位一定是此先序遍历序列的第一位”,以此为根据,我们以中序

2022-01-21 11:03:11 256

原创 P1305 新二叉树

题目描述输入一串二叉树,输出其前序遍历。输入格式第一行为二叉树的节点数 n。(1≤n≤26)后面 n行,每一个字母为节点,后两个字母分别为其左右儿子。空节点用 * 表示输入输出样例输入6abcbdicj*d**i**j**输出 #1abdicj二叉树的前序遍历。我主要说一说我的做法,肯定有别的更好的办法,我这里只陈述我的思路。首先我们需要了解到二叉树的建树方法。Bitree *creat(){ Bitree *t; .

2022-01-21 10:38:40 859 1

原创 学习记录13

上午写”修复公路“,还是并查集,根据题目有变化。通过的代码:#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;int pre[100010];int fini(int x){ if(pre[x]==x) return x; return pre[x]=fi.

2022-01-20 21:43:10 262

原创 学习记录12

上午写并查集题目”朋友“。题目为:通过的代码为:#include <stdio.h>#include <string.h>int pre[30000],pre1[30000];int fini(int t,int x)//并查集合并,因为我要建立两个并查集,所以我用t来把它们区分开{ if(t==1) { if(pre[x]==x) return x; return pre[x]=.

2022-01-20 19:32:49 172

原创 P1827 [USACO3.4]美国血统 American Heritage

题目为:通过的代码为:#include <iostream>#include <cstring>using namespace std;void backi(string m,string f){ if(f.empty)//当前此为前序遍历序列分割出的左子树序遍历序列为空的时候,代表此子树已经分割完 return; char s=f[0];//前序遍历序列的首位字符,即为此树枝的根节点 int i=m.find(s.

2022-01-18 22:06:13 72

原创 学习记录11

上午写二叉树题目,“P1827 [USACO3.4]美国血统 American Heritage”,题目描述为:通过的代码为:#include <iostream>#include <cstring>using namespace std;void backi(string m,string f){ if(f.empty)//当前此为前序遍历序列分割出的左子树序遍历序列为空的时候,代表此子树已经分割完 return; .

2022-01-18 22:00:09 562

原创 P1219 [USACO1.5]八皇后 Checker Challenge

题目是这样的:题目要求我们找到一系列的排列方式,要求是此位置的每一行每一列且两条对角线的范围内只能存在一个棋子,棋盘的规模是n*n。可以知道这样的题目可以使用dfs求出。可光知道dfs还不行,还要能够根据题目更改细节。此题我们不必要死板的用一个数组一个一个位置的去标记位置不可用。我试过,答案是对的,超时了……而且那样内存占用也会相对较多。所以我们可以该换一下思维,你想,它要求的是行列和对角线不能用,那干脆就直接使用几个数组用来标记行、列和对角线。我们可以使用某些数使得这几个数组中的下标拥有唯一性

2022-01-17 22:13:03 352

原创 学习记录10

上午看关于《大话数据结构》中的关于二叉树的章节,已经了解了四种遍历序列。分别为前序遍历序列、中序遍历序列、后序遍历序列和层次遍历序列。嗯,看了比较久,下午也有在看书。果然,看了书和会写题目是不能一概而论的……遍历方式了解到了,遍历的代码也会写了,也试了一下写创建二叉树的模板,嗯,还行,还行。把模板贴这里吧。#include <stdio.h>#include <stdlib.h>typedef struct node{ char a; s

2022-01-17 21:53:36 123

原创 学习记录9

上午听英语听力,看大话数据结构。写出了八皇后。之前只是数组开小了。开大后答案是对了,就是时间超限了。于是看了下题解。人家是用一个数组内元素标志某列和两个对角线,我傻乎乎的二维数组直接一个个标记,对比起来,难怪超时哦。好了,题目如下:得出的代码如下:#include <iostream>#include <cmath>#include <memory.h>#include <algorithm>using na.

2022-01-16 22:52:55 223

原创 学习记录8

上午照旧听英语四级听力,背单词。然后看了两章《大话数据结构》。还写了一下八皇后,没写出。晚上继续写八皇后,终于已经能够得出6*6的答案了,还没搞我这为什么数高上去答案就不对了。明明6的都可以得出来了,已经很接近了。大概,还是回溯的地方出了问题。#include <iostream>#include <cmath>#include <memory.h>#include <algorithm>using namespace

2022-01-14 22:31:13 64

原创 学习记录7

上午照旧,听了20年12月的英语四级听力,嗯……不是很容易,这些题目。写“P2392 kkksc03考前临时抱佛脚“,写出来了,在下午……题目为:得出的代码为:#include <iostream>#include <memory.h>#include <algorithm>using namespace std;int main(){ int s[4],dp[3000],n[4][100],sum=0,ans=0;.

2022-01-13 22:10:36 115

原创 学习记录6

上午听20年6月的英语四级听力,一小时。并尝试写出“单词方阵”,嗯,下午才写出来……代码和问题放在下午那一块吧。又学了些c++的函数,现在已经差不多可以使用c++来写题目了,具体学了:1,包含在#include <algorithm>中的min和max函数,还有同样包含在这个库里的sort函数,这个可好用了2,包含在#include <cstring>中的memset函数,此函数可以给一整个变量赋值,主要用它给数组赋初值。3,包含在#include <q

2022-01-12 21:31:00 95

原创 学习记录5

早上听一个小时的英语四级听力,并记下不熟悉的单词。开始写洛谷里的”马的遍历“。我知道这样的求最小步数的用bfs最好,可我还是想试一试dfs,于是写了一个上午……主要问题有:此题的输出格式有特殊要求,尽管我有注意到,可格式还是出错了,理解错了意思。我也有犹豫要不要使用回溯,因为我觉得按照这题目的意思好像是可以重复到原来的位置,于是最开始我并没有使用回溯,尽管出现了答案——这代表可以运行出来,不会死循环——可答案错误,最后使用回溯,还是没写出来……用dfs的话,的确麻烦得多……下午题

2022-01-11 21:52:15 84

原创 学习记录四

上午早晨起来听了半个小时的四级听力,记忆了出现在听力中的较重要单词。听完听力后,看了两个讲解bfs和dfs的视频。了解了两者之间的区别。成功写出2个搜索题,分别为:最后得出的答案代码为:#include <stdio.h>int ni[8][2]={{1,0},{0,1},{-1,0},{0,-1},{1,1},{-1,-1},{-1,1},{1,-1}},ans=0,n,m,xx,yy;//ni为可以走的八个方向char a[110][110];void df.

2022-01-10 22:34:49 123

原创 学习记录3

上午写了三个链表题目,分别运用到的是双向链表、合并链表跟链表遍历。由于代码过长,接下来只把主要函数展示出来:1,这个是双向链表实现void cirle(int se){ int cnt=1; while(tail->link!=NULL) tail=tail->link; tail->link=head; tail=tail->link; cnt=1; while(cnt<=se-1)

2022-01-09 21:49:38 449

原创 学习记录2

继续是栈和队列,今天主要是栈,做了一道关于出栈序列的题目。最开始我用暴力的方法将每出现的数包含其本身往后确认,使用过的数字用vis数组标记,于是我可以随着序列数字的推进每次都for循环往下推,如果一致那么就算是可实现的序列,而要是有匹对不上的数字那么就代表序列错误。可是当我提交上去时,显示的是时间超限,于是我开始换思路。咳咳,最后,在借鉴了一下别人的思路之后终于是成功ac。思路如下:首先将序列输入到一个数组中,自定义一个函数,功能为在一个for循环中按原本题目设定的入栈顺序入栈,可在入栈的同时也判断

2021-12-16 22:54:24 66

原创 学习记录1

今天啊,首先,熟悉了一下链表的创建、数目的去重和排序,代码如下:#include <stdio.h>#include <stdlib.h>typedef struct node {int ber;struct node *next;}tt;tt *a,*b,*tail1,*tail2;tt *creat(int x){ int i,j; tt *head,*tail; head=tail=(tt*)malloc(sizeof(tt));...

2021-12-15 22:23:31 1457

空空如也

空空如也

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

TA关注的人

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