- 博客(123)
- 问答 (1)
- 收藏
- 关注
原创 对编译原理中First、Follow、Select集的一些不算太抽象的理解
对编译原理中First、Follow、Select集的一些不算太抽象的理解刚开始接触的时候非常懵,不知道是在算什么,在干什么,去询问大佬和老师是否有更生动的理解方式,但是他们都达成一致说反向理解(然而我还是没听懂)趁着写课后作业的机会再翻了翻书本,看了书上例题,进行了预习回顾,研究了一些个人认为不算太差的适合普通人类大学牲理解的角度,在此记录下面以一道例题作为例子,核心是通过一个树状推导结构来理解!有一说一,可以不看上面这图,直接看下面的推导图即可,重在理解!我们之前学过推导和归约,我们这里
2022-04-05 01:23:48 1283 1
原创 Acwing2058. 笨拙的手指
Acwing2058. 笨拙的手指原题#include <iostream>#include <cstring>#include <algorithm>#include <unordered_set>using namespace std;int get(string a, int b) { int res = 0; for (int i = 0; i < a.size(); i ++ ) { res
2022-01-15 15:53:29 299
原创 Ubuntu20.04+vscode的libtorch环境配置(跑起来测试demo)
Ubuntu20.04+vscode的libtorch环境配置(跑起来测试demo)初学,网上资料五花八门,又多又乱,查了很久资料才跑通,记录一下防止自己老年痴呆…1.在pytorch官网找到libtorch,下载压缩文件,解压获得源码官网下载2.使用pytorch训练模型(前面可以都不看,就看模型怎么保存的)if __name__ == '__main__': # 训练好的模型 model = torch.load('model/best_model.pth') # 必须使用t
2021-09-04 20:32:53 1811
原创 LeetCode 82. 删除排序链表中的重复元素 II
LeetCode 82. 删除排序链表中的重复元素 II原题戳这里题解/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x
2021-04-29 21:41:36 124
原创 Leetcode 150.逆波兰表达式求值(有手就行)
Leetcode 150.逆波兰表达式求值(右手就行)原题戳这里题解class Solution {public: int evalRPN(vector<string>& tokens) { stack<int> s; for (int i = 0; i < tokens.size(); i ++ ){ if(tokens[i] == "+" || tokens[i] == "-" || token
2021-04-29 19:32:02 118
原创 Leetcode 938.二叉搜索树的范围和
Leetcode 938.二叉搜索树的范围和原题戳这里题解:这里是用了dfs搜索/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x)
2021-04-27 12:44:33 113
原创 HDOJ1003 Max Sum(最大子序列)
HDOJ1003 Max Sum(最大子序列)原题戳这里#include <iostream>#include <algorithm>using namespace std;const int N = 100010;int n, m, a[N], res;int main(){ a[0] = -100010; cin >> n; for (int i = 1; i <= n; i ++ ){ res =
2021-04-11 12:22:24 133
转载 C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝关键词:构造函数,浅拷贝,深拷贝,堆栈(stack),堆heap,赋值运算符摘要:在面向对象程序设计中,对象间的相互拷贝和赋值是经常进行的操作。如果对象在申明的同时马上进行的初始化操作,则称之为拷贝运算。例如:class1 A(“af”); class1 B=A;此时其实际调用的是B(A)这样的浅拷贝操作。如果对象在申明之后,在进行的赋值运算,我们称之为赋值运算。例如:class1 A(“af”); class1 B;B=A;此时实际
2021-04-07 10:53:06 322
原创 Acwing33. 链表中倒数第k个节点(3.25)(链表逆转)
Acwing33. 链表中倒数第k个节点(3.25)(链表逆转)输入一个链表,输出该链表中倒数第 k 个结点。注意:k >= 1;如果 k 大于链表长度,则返回 NULL;样例输入:链表:1->2->3->4->5 ,k=2输出:4题解/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListN
2021-04-07 09:51:12 90
原创 Acwing36. 合并两个排序的链表(3.24)(简单的归并)
Acwing36. 合并两个排序的链表(3.24)(简单的归并)输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。样例输入:1->3->5 , 2->4->5输出:1->2->3->4->5->5题解/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; *
2021-04-07 09:20:42 105
原创 Acwing131. 直方图中最大的矩形(3.23)(单调栈)
Acwing131. 直方图中最大的矩形(3.23)(单调栈)直方图是由在公共基线处对齐的一系列矩形组成的多边形。矩形具有相等的宽度,但可以具有不同的高度。例如,图例左侧显示了由高度为 2,1,4,5,1,3,3 的矩形组成的直方图,矩形的宽度都为 1:2559_1.jpg通常,直方图用于表示离散分布,例如,文本中字符的频率。现在,请你计算在公共基线处对齐的直方图中最大矩形的面积。图例右图显示了所描绘直方图的最大对齐矩形。输入格式输入包含几个测试用例。每个测试用例占据一行,用以描述一个直
2021-04-06 23:42:02 129
原创 Acwing1497. 树的遍历(3.22)(根据中序和后序顺序建树,并求层序遍历)
1497. 树的遍历(3.22)(根据中序和后序顺序建树,并求层序遍历)一个二叉树,树中每个节点的权值互不相同。现在给出它的后序遍历和中序遍历,请你输出它的层序遍历。输入格式第一行包含整数 N,表示二叉树的节点数。第二行包含 N 个整数,表示二叉树的后序遍历。第三行包含 N 个整数,表示二叉树的中序遍历。输出格式输出一行 N 个整数,表示二叉树的层序遍历。数据范围1≤N≤30输入样例:72 3 1 5 7 6 41 2 3 4 5 6 7输出样例:4 1 6 3 5 7 2
2021-04-06 12:41:57 135
原创 春季每日一题(3.21)旋转(模拟水题)
3174. 旋转图片旋转是对图片最简单的处理方式之一,在本题中,你需要对图片顺时针旋转 90 度。我们用一个 n×m 的二维数组来表示一个图片,例如下面给出一个 3×4 的图片的例子:1 3 5 79 8 7 63 5 9 7这个图片顺时针旋转 90 度后的图片如下:3 9 15 8 39 7 57 6 7给定初始图片,请计算旋转后的图片。输入格式输入的第一行包含两个整数 n 和 m,分别表示行数和列数。接下来 n 行,每行 m 个整数,表示给定的图片。图片中的每个元素(像素)为
2021-03-25 22:10:41 206
原创 春季每日一题(3.20)表达式求值(后缀表达式求值模板)
表达式求值(后缀表达式求值模板)给定一个表达式,其中运算符仅包含 +,-,*,/(加 减 乘 整除),可能包含括号,请你求出表达式的最终值。注意:数据保证给定的表达式合法。题目保证符号 - 只作为减号出现,不会作为负号出现,例如,-1+2,(2+2)*(-(1+1)+2) 之类表达式均不会出现。题目保证表达式中所有数字均为正整数。题目保证表达式在中间计算过程以及结果中,均不超过 231−1。题目中的整除是指向 0 取整,也就是说对于大于 0 的结果向下取整,例如 5/3=1,对于小于 0 的结
2021-03-25 22:03:36 275
原创 春季每日一题(3.18)反转链表Ⅱ
反转链表Ⅱ原题戳这里题解/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val
2021-03-25 16:05:26 126
原创 春季每日一题(3.17)反转链表
35. 反转链表定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。思考题:请同时实现迭代版本和递归版本。样例输入:1->2->3->4->5->NULL输出:5->4->3->2->1->NULL题解/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next;
2021-03-18 17:24:50 66
原创 Acwing 849. Dijkstra求最短路 I(朴素算法)
Acwing 849. Dijkstra求最短路 I(朴素算法)给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1。输入格式第一行包含整数n和m。接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。输出格式输出一个整数,表示1号点到n号点的最短距离。如果路径不存在,则输出-1。数据范围1≤n≤500,1≤m≤105,图中涉及边长均不超过10000。输入样例:
2021-03-08 22:11:21 156
原创 Acwing 848. 有向图的拓扑序列(图论BFS的应用)
Acwing 848. 有向图的拓扑序列(图论BFS的应用)给定一个n个点m条边的有向图,点的编号是1到n,图中可能存在重边和自环。请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出-1。若一个由图中所有点构成的序列A满足:对于图中的每条边(x, y),x在A中都出现在y之前,则称A是该图的一个拓扑序列。输入格式第一行包含两个整数n和m接下来m行,每行包含两个整数x和y,表示存在一条从点x到点y的有向边(x, y)。输出格式共一行,如果存在拓扑序列,则输出任意一个合法的拓扑序列即可
2021-03-08 19:24:07 212
原创 Acwing 847. 图中点的层次(树与图的BFS)
Acwing 847. 图中点的层次(树与图的BFS)给定一个n个点m条边的有向图,图中可能存在重边和自环。所有边的长度都是1,点的编号为1~n。请你求出1号点到n号点的最短距离,如果从1号点无法走到n号点,输出-1。输入格式第一行包含两个整数n和m。接下来m行,每行包含两个整数a和b,表示存在一条从a走到b的长度为1的边。输出格式输出一个整数,表示1号点到n号点的最短距离。数据范围1≤n,m≤105输入样例:4 51 22 33 41 31 4输出样例:1题解(ST
2021-03-07 21:30:32 177
原创 Acwing 846. 树的重心(树与图的DFS)
Acwing 846. 树的重心(树与图的DFS)给定一颗树,树中包含n个结点(编号1~n)和n-1条无向边。请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。输入格式第一行包含整数n,表示树的结点数。接下来n-1行,每行包含两个整数a和b,表示点a和点b之间存在一条边。输出格式输出一个整数m,表示将重心删除后,剩余各个连通块中点数的最大值。数据范围1≤n
2021-03-07 16:45:52 147
原创 Acwing 845. 八数码(字符串BFS + 哈希)
Acwing 845. 八数码(字符串BFS + 哈希)在一个3×3的网格中,1~8这8个数字和一个“x”恰好不重不漏地分布在这3×3的网格中。例如:1 2 3x 4 67 5 8在游戏过程中,可以把“x”与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为如下排列(称为正确排列):1 2 34 5 67 8 x例如,示例中图形就可以通过让“x”先后与右、下、右三个方向的数字交换成功得到正确排列。交换过程如下:1 2 3 1 2 3 1
2021-03-06 20:00:33 152
原创 Acwing 844. 走迷宫(BFS)
Acwing 844. 走迷宫(BFS)给定一个n*m的二维整数数组,用来表示一个迷宫,数组中只包含0或1,其中0表示可以走的路,1表示不可通过的墙壁。最初,有一个人位于左上角(1, 1)处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。请问,该人从左上角移动至右下角(n, m)处,至少需要移动多少次。数据保证(1, 1)处和(n, m)处的数字为0,且一定至少存在一条通路。输入格式第一行包含两个整数n和m。接下来n行,每行包含m个整数(0或1),表示完整的二维数组迷宫。输出格式
2021-03-06 19:24:41 214
原创 Acwing 843. n-皇后问题(DFS剪枝)
Acwing 843. n-皇后问题(DFS剪枝)n-皇后问题是指将 n 个皇后放在 n∗n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。1_597ec77c49-8-queens.png现在给定整数n,请你输出所有的满足条件的棋子摆法。输入格式共一行,包含整数n。输出格式每个解决方案占n行,每行输出一个长度为n的字符串,用来表示完整的棋盘状态。其中”.”表示某一个位置的方格状态为空,”Q”表示某一个位置的方格上摆着皇后。每个方案输出完成后
2021-03-06 18:51:37 253
原创 Acwing 842. 排列数字(STL & DFS)
Acwing 842. 排列数字(STL & DFS)给定一个整数n,将数字1~n排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格式共一行,包含一个整数n。输出格式按字典序输出所有排列方案,每个方案占一行。数据范围1≤n≤7输入样例:3输出样例:1 2 31 3 22 1 32 3 13 1 23 2 1题解STL的next_permutation()#include <iostream>#include <
2021-03-06 18:42:08 155
原创 Acwing 841. 字符串哈希(前缀哈希)
Acwing 841. 字符串哈希(前缀哈希)给定一个长度为n的字符串,再给定m个询问,每个询问包含四个整数l1,r1,l2,r2,请你判断[l1,r1]和[l2,r2]这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。输入格式第一行包含整数n和m,表示字符串长度和询问次数。第二行包含一个长度为n的字符串,字符串中只包含大小写英文字母和数字。接下来m行,每行包含四个整数l1,r1,l2,r2,表示一次询问所涉及的两个区间。注意,字符串的位置从1开始编号。输出格式
2021-03-06 17:23:15 123
原创 Acwing 840. 模拟散列表(哈希表:拉链法 + 开放寻址法)
Acwing 840. 模拟散列表(手写哈希表)维护一个集合,支持如下几种操作:“I x”,插入一个数x;“Q x”,询问数x是否在集合中出现过;现在要进行N次操作,对于每个询问操作输出对应的结果。输入格式第一行包含整数N,表示操作数量。接下来N行,每行包含一个操作指令,操作指令为”I x”,”Q x”中的一种。输出格式对于每个询问指令“Q x”,输出一个询问结果,如果x在集合中出现过,则输出“Yes”,否则输出“No”。每个结果占一行。数据范围1≤N≤105−109≤x≤109
2021-03-06 16:46:40 576
原创 离散数学中的村人指路和说谎者
离散数学中的村人指路和说谎者最近开始学离散数学,遇到了这一类"脑筋急血栓"问题。。。。自己对这类问题思考和总结了一番,发现了一些有意思的规律大佬轻喷,俺是蒟蒻这种问题大概可以分成两类:二对一一对二啥是“二对一”呢?emmmm就是俩人(一个骗子一个老实人)对于一个问题作答的题目啥是“一对二”呢?emmmm就是一个人 对于俩选项(你是骗子 or not)下面分别对两类问题举一个例子二对一问题:村人指路题目: 边远村庄的每个人要么总说真话,要么总说谎话。对旅游者的问题
2021-03-06 11:06:03 1487
原创 Acwing 838. 堆排序
Acwing 838. 堆排序输入一个长度为n的整数数列,从小到大输出前m小的数。输入格式第一行包含整数n和m。第二行包含n个整数,表示整数数列。输出格式共一行,包含m个整数,表示整数数列中前m小的数。数据范围1≤m≤n≤105,1≤数列中元素≤109输入样例:5 34 5 1 3 2输出样例:1 2 3题解#include <iostream>#include <algorithm>using namespace std;const int
2021-03-05 23:29:32 192
原创 Acwing 837. 连通块中点的数量(并查集+维护根节点)
Acwing 837. 连通块中点的数量(并查集+维护根节点)给定一个包含n个点(编号为1~n)的无向图,初始时图中没有边。现在要进行m个操作,操作共有三种:“C a b”,在点a和点b之间连一条边,a和b可能相等;“Q1 a b”,询问点a和点b是否在同一个连通块中,a和b可能相等;“Q2 a”,询问点a所在连通块中点的数量;输入格式第一行输入整数n和m。接下来m行,每行包含一个操作指令,指令为“C a b”,“Q1 a b”或“Q2 a”中的一种。输出格式对于每个询问指令”Q1 a
2021-03-04 23:04:40 111 1
原创 Acwing 836. 合并集合(并查集)
Acwing 836. 合并集合(并查集)一共有n个数,编号是1~n,最开始每个数各自在一个集合中。现在要进行m个操作,操作共有两种:“M a b”,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作;“Q a b”,询问编号为a和b的两个数是否在同一个集合中;输入格式第一行输入整数n和m。接下来m行,每行包含一个操作指令,指令为“M a b”或“Q a b”中的一种。输出格式对于每个询问指令”Q a b”,都要输出一个结果,如果a和b在同一集合内,则输出“
2021-03-04 00:37:49 184 1
原创 Acwing 143. 最大异或对(Trie树)
Acwing 143. 最大异或对(Trie树)在给定的N个整数A1,A2……AN中选出两个进行xor(异或)运算,得到的结果最大是多少?输入格式第一行输入一个整数N。第二行输入N个整数A1~AN。输出格式输出一个整数表示答案。数据范围1≤N≤105,0≤Ai<231输入样例:31 2 3输出样例:3题解#include <iostream>#include <algorithm>using namespace std;const in
2021-03-03 23:26:06 137 1
原创 Acwing 835. Trie字符串统计(Trie树模板)
Acwing 835. Trie字符串统计(Trie树模板)维护一个字符串集合,支持两种操作:“I x”向集合中插入一个字符串x;“Q x”询问一个字符串在集合中出现了多少次。共有N个操作,输入的字符串总长度不超过 105,字符串仅包含小写英文字母。输入格式第一行包含整数N,表示操作数。接下来N行,每行包含一个操作指令,指令为”I x”或”Q x”中的一种。输出格式对于每个询问指令”Q x”,都要输出一个整数作为结果,表示x在集合中出现的次数。每个结果占一行。数据范围1≤N≤2∗10
2021-03-03 22:51:19 254 2
原创 Acwing 831. KMP字符串(模板)
Acwing 831. KMP字符串(模板)给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模板串P在模式串S中多次作为子串出现。求出模板串P在模式串S中所有出现的位置的起始下标。输入格式第一行输入整数N,表示字符串P的长度。第二行输入字符串P。第三行输入整数M,表示字符串S的长度。第四行输入字符串S。输出格式共一行,输出所有出现位置的起始下标(下标从0开始计数),整数之间用空格隔开。数据范围1≤N≤1051≤M≤106输入样例:3aba
2021-03-03 17:39:31 113 2
原创 Acwing 154. 滑动窗口
Acwing 154. 滑动窗口给定一个大小为n≤106的数组。有一个大小为k的滑动窗口,它从数组的最左边移动到最右边。您只能在窗口中看到k个数字。每次滑动窗口向右移动一个位置。以下是一个例子:该数组为[1 3 -1 -3 5 3 6 7],k为3。窗口位置 最小值 最大值[1 3 -1] -3 5 3 6 7 -1 31 [3 -1 -3] 5 3 6 7 -3 31 3 [-1 -3 5] 3 6 7 -3 51 3 -1 [-3 5 3] 6 7 -3 51 3 -1 -3 [
2021-03-02 22:45:52 91
原创 Acwing 830. 单调栈
Acwing 830. 单调栈给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出-1。输入格式第一行包含整数N,表示数列长度。第二行包含N个整数,表示整数数列。输出格式共一行,包含N个整数,其中第i个数表示第i个数的左边第一个比它小的数,如果不存在则输出-1。数据范围1≤N≤1051≤数列中元素≤109输入样例:53 4 2 7 5输出样例:-1 3 -1 2 2题解#include <iostream>#include <alg
2021-03-02 22:22:33 80
原创 Acwing 829. 模拟队列
Acwing 829. 模拟队列实现一个队列,队列初始为空,支持四种操作:(1) “push x” – 向队尾插入一个数x;(2) “pop” – 从队头弹出一个数;(3) “empty” – 判断队列是否为空;(4) “query” – 查询队头元素。现在要对队列进行M个操作,其中的每个操作3和操作4都要输出相应的结果。输入格式第一行包含整数M,表示操作次数。接下来M行,每行包含一个操作命令,操作命令为”push x”,”pop”,”empty”,”query”中的一种。输出格式对于
2021-03-02 13:19:43 94
原创 Acwing 828. 模拟栈
Acwing 828. 模拟栈实现一个栈,栈初始为空,支持四种操作:(1) “push x” – 向栈顶插入一个数x;(2) “pop” – 从栈顶弹出一个数;(3) “empty” – 判断栈是否为空;(4) “query” – 查询栈顶元素。现在要对栈进行M个操作,其中的每个操作3和操作4都要输出相应的结果。输入格式第一行包含整数M,表示操作次数。接下来M行,每行包含一个操作命令,操作命令为”push x”,”pop”,”empty”,”query”中的一种。输出格式对于每个”em
2021-03-02 13:13:33 129
原创 Acwing 827. 双链表(数组实现添,删)
Acwing 827. 双链表(数组实现添,删)实现一个双链表,双链表初始为空,支持5种操作:(1) 在最左侧插入一个数;(2) 在最右侧插入一个数;(3) 将第k个插入的数删除;(4) 在第k个插入的数左侧插入一个数;(5) 在第k个插入的数右侧插入一个数现在要对该链表进行M次操作,进行完所有操作后,从左到右输出整个链表。注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n个数,则按照插入的时间顺序,这n个数依次为:第1个插入的数,第2个插入的数,…第n个插入的
2021-03-01 23:05:00 212
原创 Acwing 826. 单链表(数组实现头插,任意插,删)
Acwing 826. 单链表(数组实现头插,任意插,删)实现一个单链表,链表初始为空,支持三种操作:(1) 向链表头插入一个数;(2) 删除第k个插入的数后面的数;(3) 在第k个插入的数后插入一个数现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n个数,则按照插入的时间顺序,这n个数依次为:第1个插入的数,第2个插入的数,…第n个插入的数。输入格式第一行包含整数M,表示操作次数。接下来M行
2021-03-01 23:00:54 186
原创 Acwing 803. 区间合并(模板)
Acwing 803. 区间合并(模板)给定 n 个区间 [li,ri],要求合并所有有交集的区间。注意如果在端点处相交,也算有交集。输出合并完成后的区间个数。例如:[1,3]和[2,6]可以合并为一个区间[1,6]。输入格式第一行包含整数n。接下来n行,每行包含两个整数 l 和 r。输出格式共一行,包含一个整数,表示合并区间完成后的区间个数。数据范围1≤n≤100000,−109≤li≤ri≤109输入样例:51 22 45 67 87 9输出样例:3题解#i
2021-03-01 18:34:55 118
空空如也
关于hdoj1002试题的疑问
2020-09-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人