- 博客(30)
- 收藏
- 关注
原创 洛谷P1030求先序排列
在这里做个小总结吧:对于树的三种遍历如果给定前序遍历和后序遍历,中序遍历不一定是确定的;但是给定中序与后序排列,是可以确定前序的;并且给定前序和中序也是可以确定后序的。这道题就讨论第二种情况:重点就是先找到根,然后在递归就可以了~#define _CRT_SECURE_NO_WARNINGS#include <cstdio>#include <cmath>#include <iostream>#include <algorithm>#i
2020-09-25 11:23:00 137
原创 洛谷P3884 二叉树问题的纯代码题解
好久没有发题解了,有没有人想我呀~(其实没有主要是最近开学啦,我变成大二啦,校园里来了好多学弟学妹,各种课程和活动一下子就把日程给塞满了,弄得我都没有大块的专门的时间写题,现在在数据结构的课上摸鱼~不废话了,这个题关键点就是储存一下father的点,再记录一下深度和宽度就可以了~上代码:#define _CRT_SECURE_NO_WARNINGS#include <cstdio>#include <cmath>#include <iostream>#inc
2020-09-25 11:20:44 276
原创 洛谷P4387验证栈序列的纯代码题解
纪念一下在上课的时候摸鱼过了这道题还嚣张地在这写博客哈哈哈其实没过(如果没看题解的话这道题的基本思路就是用栈模拟就好了但是还是有一点点收获的(我绝对不是想喝一点点了因为要对两列数字进行比较,我一开始想的是双指针法,用了loca和locb同时对两个数列进行遍历,但是这样思路容易乱,我这么写不知道哪里错了但我就是WA了;后来一参考题解的写法发现,与其两个同时都要移动指针,不如固定一个去移动另一个,所以对a遍历就行了,在遍历的时候顺带和b比较注意一个细节,可以一次性出栈多个数字,所以这个位置用的是wh
2020-09-18 10:33:32 199
原创 理解一下二叉树的三种遍历方法
二叉树的遍历时非常经典的考题,主要有前序、中序、后序三种,但是我对这具体怎么遍历还是有点混乱,这里写一篇文章理一下:以下面的这个二叉树为例:相对应地建起树:#define _CRT_SECURE_NO_WARNINGS#include <cstdio>#include <cmath>#include <iostream>#include <algorithm>#include <cstring>#include <stri
2020-09-16 20:19:30 332
原创 二叉树的基本概念
本篇对完全小白非常友好,因为我本人也是小白~~(不要脸~~首先来明确树的几个概念:对于一个结点,拥有的子树数(结点有多少分支)称为结点的度(Degree),一般的树的度为2,即二叉树。一棵树的深度(高度)是树中结点所在的最大的层次。如果树中结点的子树从左到右看,谁在左边,谁在右边,是有规定的,这棵树称为有序树;反之称为无序树。在有序树中,一个结点最左边的子树称为"第一个孩子(first son)",最右边的称为"最后一个孩子(last son)"。二叉树的性质:1、二叉树中,第 i 层最多有 2
2020-09-16 10:11:19 426
原创 关于队列的板子
先对刚刚写的栈和队列区分一下吧~栈结构是一端封口,特点是"先进后出";而队列的两端全是开口,特点是"先进先出"。来个图示吧:这个应该很清楚了~同样模拟队列的话咱也假装不知道有queue这个东西~现在又有顺序队列和链式队列两种情况~顺序队列:void inQueue(int* a) { a[rear] = data; rear++;}void deQueue(int *a){ while (front != rear) { printf("%d", a[front]);
2020-09-10 17:32:08 97
原创 关于栈的板子
学校最近在学用c来模拟各种数据结构,所以想看stl的这里么得。顺序栈:实现空间是连续的,两个常用的函数就是pop和push了void pop(int* a) { if (top == -1) return ; else printf("%d\n", a[top--]); return;}void push(int* a) { a[++top] = elem; }链式栈:用链表的方式来实现栈,不同的是越后进入的元素越放在前面typedef struct lineStack { in
2020-09-10 17:10:56 78
原创 multimap 容器
multimap 容器具有和 map 相同的特性:1、 multimap 容器也用于存储 pair<const K, T> 类型的键值对,其中各个键值对的键的值不能做修改2、该容器也会自行根据键的大小对存储的所有键值对做排序操作不同之处:1、multimap 容器中可以同时存储多(≥2)个键相同的键值对。2、multimap 未提供 at() 成员方法,也没有重载 [] 运算符,因为 multimap 容器中指定的键可能对应多个键值对,而不再是 1 个。...
2020-09-04 16:39:55 170
原创 关于STL的map用法总结
map 容器是关联式容器的一种,存储的都是pair 类模板创建的键值对;键值对,其中第一个元素作为键(key),第二个元素作为值(value)。在使用 map 容器存储多个键值对时,该容器会自动根据各键值对的键的大小,按照既定的规则进行排序。默认情况下,map 容器选用std::less排序规则(其中 T 表示键的数据类型)是做升序排序使用 map 容器存储的各个键值对,键的值既不能重复也不能被修改。map的迭代器:C++ STL 标准库为 map 容器配备的是双向迭代器(bidirectional
2020-09-03 09:58:21 321
原创 洛谷P2404 自然数的拆分的纯代码题解
我一开始以为是个记忆化搜素,然后觉得哇这样的记忆化怎么存呢后来发现是个打表题(bushi#define _CRT_SECURE_NO_WARNINGS#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>const int N = 1e3 + 5;using namespace std;int a[N] = { 1 };int n;void se
2020-09-02 10:07:58 144
原创 AtCoder Beginner Contest 176 D - Wizard in Maze
题目链接:atcoder D题传送路线图的题目一般都会往bfs上想,因为这个题要用魔法的次数越少越好,所以优先走路,走不了再去用魔法~这个题有两个很巧妙的点:1、因为要同时存x,y两个点,用que = x1 * N + y1的方式直接存,后面用int x = que[s1++], y = x % N; x /= N重新获得xy2、用s和s1两个指针来进行bfs,并根据题意确定优先顺序#define _CRT_SECURE_NO_WARNINGS#include <cstdio>#
2020-09-01 21:52:42 175
原创 洛谷P1135 奇怪的电梯的纯代码题解
没啥特殊的,记住队列里存的是什么就行,直接上代码#include <iostream>#include <cstdio>#include <queue>#include <cstring>#define MAXN 205using namespace std;queue <int> q;int n, a, b;int k[MAXN], mark[MAXN], ans[MAXN];int main(){ scanf(
2020-08-06 16:19:11 240 1
原创 洛谷P1443 马的遍历的纯代码题解
之前的二分题解就全部告一段落啦!现在来看搜索而马的遍历是一道非常典型的bfs,这里用队列来实现比较方便#include <iostream>#include <cstdio>#include <cstring>#include <queue>#define MAXN 405using namespace std;typedef struct coordinate{ int x, y;}coor;coor horse;queue &
2020-08-06 15:37:06 192 1
原创 洛谷P2392 考前抱佛脚的纯代码题解
一个简单的dfs,搜索的层数为题目数#include <iostream>#include <cstdio>#include <cstring>using namespace std;int maxn, ans, sum;int s[5], a[25];void dfs(int time, int cengshu, int i){ if(cengshu > s[i]) { maxn = max(maxn, time
2020-08-06 14:48:57 251
原创 洛谷P2678跳石头和P3853路标设置的二分题解
我平时一般是每道题分开写博客的,但为什么这次两道题放在一起了呢?因为实在是太像了!但是它们是相似又相反的,在这好好分析对比一下。1、P2678 跳石头这道题是求最小值的最大值,画个图示如下:如果判断mid符合题意,那么先把mid存到ans里,然后l = mid + 1,往右边找如果不符合题意,r = mid - 1,往左边找代码就长这样(说实话我也没想到我能一遍过#include <cstdio>#include <iostream>#include <cma
2020-08-05 16:55:43 180
原创 洛谷P1678 烦恼的高考志愿二分和STL题解
和这道题死刚了一下午…对二分的认识加深了不少 但我还是好菜啊啊啊啊啊以这道题的数据范围暴力肯定过不了,下面两道题都是O(ologn)可以过的。基本的思路都是找到比分数大的最小的数,然后把它和前一个数(即比分数小的最大的数)与目标分数相减做比较即可。1、现说偷懒的STL大法用upper_bound函数找到比目标大的最小的数,返回其所在的位置,对比所有学校分数都低的数特判一下即可#include <iostream>#include <cstdio>#include &l
2020-08-04 19:06:10 541
原创 洛谷P2240 木材加工的纯代码题解
和P1873 砍树那一题基本没有区别照这样子写就是了写了几题发现其实二分能变化的形势并不多…板子基本就是死的,在更复杂的题目中更多的是作为查找的一种有效方式出现#include <iostream>#include <cstdio>using namespace std;int n, k, ans;int a[100005];bool judge(int x){ int tot = 0; if(x == 0) return true; fo
2020-08-02 18:19:52 182
原创 洛谷P1024 一元三次方程的纯代码题解
一个入门题第一下给我WA掉了不愧是我一检查发现是函数传double参数时习惯性写成了int我原地嘤嘤嘤这题,注意精度,没了#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>using namespace std;#define eps 1e-4double a, b, c, d;double f(double x){ return
2020-08-02 18:16:28 172
原创 洛谷P1824 进击的奶牛的纯代码题解
今天是二分专题~说白了就是一种在有序的条件下高效的枚举方法。本题想让奶牛间间距尽可能大,就二分找呗,如果可行就先存着,往大了方向找,看有没有更好的答案,反之就往小的方向找#include <iostream>#include <cstdio>#include <algorithm>using namespace std;int n, c, l, r, mid, ans;int a[100005];bool judge(int x){ int
2020-08-02 18:13:15 439 1
原创 洛谷P2249 查找的纯代码题解
最基本的一个二分没了注意细节叭,l和r是<还是<=的关系,然后转换边界的时候注意要不要加一,否则会死循环#include <iostream>#include <cstdio>using namespace std;//#define MAXN 1e6+5int m, n, q, loc;int a[1000005];int binary_search(){ int l = 1; int r = n; int mid;
2020-08-01 17:21:38 788
原创 洛谷P4447 分组的纯代码题解
洛谷上面有很多大佬的讲解,在这我就不赘述了,大致的思路就是为了让最少的尽量多,那么分得就要尽可能地平均,对一个能同时接在几组后面的数字,就接在最短的一组里。#include <iostream>#include <cstdio>#include <algorithm>using namespace std;#define MAXN 100005int n, zushu, minn;int a[MAXN], nnext[MAXN], size[MAXN];
2020-08-01 17:19:30 414
原创 洛谷P3817 小A的糖果 纯代码题解
就是一个局部的贪心,题目很水,但是我一开始愣是没反应过来是我太菜 菜是原罪#include <iostream>#include <cstdio>using namespace std;int n, x, front, now;long long ans;int main(){ scanf("%d%d%d", &n, &x, &front); for(int i = 2; i <= n; i ++) {
2020-08-01 17:13:18 205
原创 洛谷P5019 铺设道路的递归和贪心题解
写了一下午代码越发地觉得自己是个傻逼这和这篇博客并没有什么关系只是单纯地感叹一下这是一道2018、2013以及USACO都考过的题目,非常地经典,这里提供递归和贪心的两种题解。1、递归题目很简单,就是填坑嘛,能一起填的就一起填呗,这样省事,然后依次找可以一起填的子区间填就是了,发现处理过程非常相似就想到递归咯。这道题如果用暴力的话会超时,这里把能一起填的直接加就会简便一些,时间复杂度大致O(nlogn)具体细节见代码:#include <cstdio>#include <i
2020-07-25 17:15:38 177
原创 洛谷P1102 A-B数对的双指针和hash和(彩蛋)解法
题意很简单,就是找出有多少对满足A-B=C的A和B一开始看哦呦这不是个普及-题么,上来就暴力,然后果然 t掉然后开始优化:通过看题解 发现有重复数字时会有重复计算的情况,就出现了两种优化:1、B一个个列举,找到A的重复区间,就是下面的双指针法#include <iostream>#include <cstdio>#include <algorithm>using namespace std;#define MAXN 200005typedef long
2020-07-17 15:05:43 250
原创 洛谷P1164 小A点菜的dfs和dp题解
我又来了,因为我又干了和上次差不多的事:把一道dp的题写成了dfs(具体情况请看我的上篇博客)说不定是我搜索写得牛逼呢不同的是,这次我用dfs过了嘿嘿嘿,想用dp再来一遍先上dfs代码:#include <iostream>#include <cstdio>#include <vector>using namespace std;int n, m;vector<int> a;int ans = 0;void dfs(int dishes,
2020-07-12 20:07:55 225
原创 洛谷P1002 过河卒的dfs和dp题解
过河卒算是很经典的一道题了吧,NOIP 2002年的题目,我在学习递推的时候遇上的,明明是一道dp题,我看数据不是非常大(1≤n,m≤20,0≤马的坐标≤20)然后我就试了一下dfs,想练练手防止搜索忘了。上代码:#include <iostream>#include <cstdio>#include <cstring>using namespace std;int ans = 0;bool vis[25][25];int a, b, n, m;int
2020-07-08 15:09:55 961 3
原创 学校oj的文件代码
又来到了久违的oj公开代码时间~之前学校老师反映有代码抄袭情况,所以我一直拖到截止时间才发~(而且这次做得比较慢)废话不多说上题目:问题 A: 实验12_1_初识ASCII码文件时间限制: 1 Sec 内存限制: 128 MB题目描述已知一个ASCII码文件,文件名为dict.dic,该文件中只包含ASCII码中的字符,即可对应整数0—127。我们将ASCII码中的字符分为4类,第...
2020-04-08 22:58:11 2314 5
原创 学校的oj:“略为”复杂的链表操作
又是一次愉快的学校的oj作业题…由于我实在是太懒了???? 一直到现在才更话不多说上题目:Problem A: 实验11_9_链表归并已知有两个递增的正整数序列A和B,序列中元素个数未知,同一序列中不会有重复元素出现,有可能某个序列为空。现要求将序列B归并到序列A中,且归并后序列A的数据仍然按递增顺序排列。如果序列B中某些数据在序列A中也存在,则这些数据所在节点仍然留在序列B中,而不被归并到序...
2020-03-14 21:07:21 1158 1
原创 链表的应用:用循环链表解决约瑟夫问题
洛谷题目链接:洛谷P1996#include<iostream>using namespace std;struct node{ long d; node *next;};long n, m;node *head, *p, *r;int main(){ long i, j, k, l; cin >> n >> m...
2020-03-04 11:37:07 281
原创 初识链表:学校oj的题目
Problem A: 实验11_4_初识链表Time Limit: 1 Sec Memory Limit: 128 MBDescription已知一个正整数序列,个数未知,但至少有一个元素,你的任务是建立一个单链表,并使用该链表存储这个正整数序列,然后统计这个序列中元素的最大值与最小值,计算序列全部元素之和。正整数的输入用-1作为结束标志,注意-1不算这个正整数序列中的元素(不要统计-1)...
2020-03-04 11:03:05 2419
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人