- 博客(21)
- 收藏
- 关注
原创 蓝桥被学习记录——完全背包问题—dp (acwing)
有N种物品和一个容量是VV的背包,每种物品都有无限件可用。第i种物品的体积是vi,价值是wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V用空格隔开,分别表示物品种数和背包容积。接下来有N行,每行两个整数vi,wi用空格隔开,分别表示第ii种物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000#incl...
2021-02-24 20:39:39 148
原创 蓝桥杯学习记录——01背包问题—dp(acwing)
有N件物品和一个容量是V的背包。每件物品只能使用一次。第i件物品的体积是vi,价值是wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V用空格隔开,分别表示物品数量和背包容积。接下来有N行,每行两个整数vi,wi用空格隔开,分别表示第i件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000#include...
2021-02-24 20:21:00 227
原创 蓝桥杯学习记录——差分与差分矩阵
差分是前缀和的逆运算一维差分:给定一个初始数组 a,构造一个差分数组 b ,使 a是b 的前缀和;一维差分的核心操作是用来解决将a数组的 [L,R]区间全部加上c,代码如下#include <bits/stdc++.h>using namespace std;const N = 110;int a[N]; //原始数组int b[N]; //差分数组int main(){ int n; cin >> n; //数组中元素个数 ...
2021-02-24 17:59:32 136
原创 蓝桥杯学习记录——线段树(from acwing)
线段树是树状数组的变种,用途是在log(n)内查询一个指定区间的咨询(sum、max、min……),树状数组能实现的功能线段树全可以实现,线段树可实现的功能树状数组不一定可以实现。线段树也是一种二叉搜索树,每个结点存储了一个区间。线段树的存储利用数组存储,类似于堆以求区间和为例,线段树做法如下#include <bits/stdc++.h>using namespace std;const int N=10010;int a[N] //原数组struct Node
2021-02-19 21:42:59 176
原创 蓝桥杯学习记录——树状数组(from acwing)
树状数组查询和修改复杂度都为log(n)树状数组c[i]位置存放的数据为 数组A中(x-2^k,x]的数据之和(左开右闭区间)#include <bits/stdc++.h>using namespace std;const int N=110;int a[N]; //原始数组int c[N]; //树状数组/*树状数组三个关键函数*/int lowbit(int x) //求2^k (k为x的二进制低位0的个数){ return x & -x;
2021-02-19 21:11:18 154
原创 蓝桥杯学习记录——前缀和(from acwing)
/*一维前缀和*/ /*初始化*/ int a[n+1]; //原始数组,从下标1开始存放数据 int s[n+1]; //前缀和 ,s[0]=0 for(int i=1;i<=n;i++){ s[i]=s[i-1]+a[i]; } /*求区间[a,b]的和*/ int ans = s[b]-s[a-1];/*二维前缀和*/ /*初始化*/ int a[n+1][n+1]; int s[n+1][n+.
2021-02-19 20:32:03 214
原创 蓝桥杯学习记录——二分(from acwing)
对于一个长度为N的递增有序集合 Sflag为区分绿色和红色两个部分的标致;如果所求位置为绿色区域的右端点,例如查找小于flag的最大的数,代码如下所示int binary_search(int flag){ int L=0,R=N-1; while(L<R){ int mid=(L+R+1)/2; //注意要+1, 例如 当 L=1,R=3 此时mid=2,如果更新左端点 此时L=2,下 一次循环 mid=( 2+3 )/2 =2 ,相对上次不会发生
2021-02-19 20:10:49 101
原创 贪吃蛇—C语言实现
大一下学期的课程作业,记录一下#include <stdio.h>#include <stdlib.h>#include <windows.h>#include <time.h>#include <conio.h>#define U 1 //分别代表键盘的输入上下左右 #define D 2#define L 3#define R 4typedef struct snake{ //蛇身链表,也可用来定义食物
2020-12-07 21:07:55 249
原创 栈和队列实现字符串逆序输出以及判断是否回文
别的专业的朋友让我帮忙写的一个很简单的小作业……运行效果图#include<iostream>#include<cstdlib>#include<cstdio>#define ERROR '#'using namespace std;typedef struct SNode{ //栈结构定义 char *Data; //存储元素的数组 int Top; //栈顶指针,即栈顶元素在数组中的下标 int MaxSize; //
2020-11-28 15:34:39 913
原创 数据结构习题——搜索树判断
对于二叉搜索树,我们规定任一结点的左子树仅包含严格小于该结点的键值,而其右子树包含大于或等于该结点的键值。如果我们交换每个节点的左子树和右子树,得到的树叫做镜像二叉搜索树。现在我们给出一个整数键值序列,请编写程序判断该序列是否为某棵二叉搜索树或某镜像二叉搜索树的前序遍历序列,如果是,则输出对应二叉树的后序遍历序列。输入格式:输入的第一行包含一个正整数N(≤1000),第二行包含N个整数,为给出的整数键值序列,数字间以空格分隔。输出格式:输出的第一行首先给出判断结果,如果输入的序列是某棵二
2020-11-19 16:46:01 501
原创 数据结构习题——玩转二叉树(C语言实现)
给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:71 2 3 4 5 6 74 1 3 2 6 5 7输出样例
2020-11-18 20:49:14 1334
原创 数据结构习题——是否完全二叉搜索树(C语言实现)
将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。输入格式:输入第一行给出一个不超过20的正整数N;第二行给出N个互不相同的正整数,其间以空格分隔。输出格式:将输入的N个正整数顺序插入一个初始为空的二叉搜索树。在第一行中输出结果树的层序遍历结果,数字间以1个空格分隔,行的首尾不得有多余空格。第二行输出YES,如果该树是完全二叉树;否则输出NO。输入样例1:938 45 42 24
2020-11-16 20:22:51 308
原创 数据结构习题—办事大厅排队(链式队列实现)
在郑州大学综合办事大厅,每天陆陆续续有很多人来排队办事。现在你能否写程序帮助老师时刻了解当前办理业务的情况。请同学们学习C++ STL中 list相关内容后,编程实践。输入格式:第一行一个数字N,表示排队信息或者查询信息条目的数量。以下N行,每行的内容有以下3种情况(1) in name 表示名字为name的人员新来到办事大厅,排在队伍的最后。(in和name间存在一个空格,name是名字对应字符串,长度不超过10)。(2) out 表示当前排在最前面的人已经办理完业务,离开了。
2020-10-29 19:19:50 725
原创 数据结构习题—简单模拟单队列排队(顺序结构循环队列实现)
用程序简单模拟一个单队列多窗口的排队模式:设某银行有一个固定能容纳N个顾客的等候区,顾客想进银行,若等候区有空则可进,否则被拒绝进入。每当银行柜员叫号时,等候区中最先进入的顾客离开等候区前往柜台办理业务,若叫号时等候区无人,则此次叫号作废。输入格式:第一行输入一个不大于20的正整数N,表示银行等候区能容纳的人数,接下来用若干行表示依时间顺序先后发生的“顾客想进银行”或“叫号”事件,格式分别是:顾客想进银行,用 In <id> 表示,其中<id>是顾客编号,为不大于1
2020-10-29 16:29:21 2065
原创 数据结构习题—出栈序列的合法性
给定一个最大容量为 M 的堆栈,将 N 个数字按 1, 2, 3, ..., N 的顺序入栈,允许按任何顺序出栈,则哪些数字序列是不可能得到的?例如给定 M=5、N=7,则我们有可能得到{ 1, 2, 3, 4, 5, 6, 7 },但不可能得到{ 3, 2, 1, 7, 5, 6, 4 }。输入格式:输入第一行给出 3 个不超过 1000 的正整数:M(堆栈最大容量)、N(入栈元素个数)、K(待检查的出栈序列个数)。最后 K 行,每行给出 N 个数字的出栈序列。所有同行数字以空格间隔。输出格式
2020-10-23 12:46:34 1486 1
原创 数据结构习题—表达式转换
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。输入格式:输入在一行中给出不含空格的中缀表达式,可包含+、-、*、\以及左右括号(),表达式不超过20个字符。输出格式:在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。输入样例:2+3*(7-4)+8/4输出样例:2 3 7 4 - * + 8 4 / +
2020-10-23 10:54:23 360
原创 数据结构习题—求前缀表达式的值
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。输入格式:输入在一行内给出不超过30个字符的前缀表达式,只包含+、-、*、/以及运算数,不同对象(运算数、运算符号)之间以空格分隔。输出格式:输出前缀表达式的运算结果,保留小数点后1位,或错误信息ERROR。输入样例:+ + 2 * 3 - 7 4 / 8 4
2020-10-21 18:42:25 1759
原创 数据结构习题—括号匹配(堆栈)
检查一段C语言代码的小括号( )、 中括号 [ ] 和大括号{ } 是否匹配。输入格式:在一行中输入一段C语言代码,长度不超过1000个字符(行末以换行符结束)。输出格式:第一行输出左括号的数量和右括号的数量,中间以一个空格间隔。若括号是匹配的,在第二行打印YES,否则打印NO。输入样例1:for(int i=0; i<v; i++){ visited[i] = 0; for(int j=0; j<v; j++) scanf("%d",&(g->Adj[
2020-10-19 20:24:38 828
原创 数据结构习题—链表去重(数组模拟链表)
给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉。即对每个键值 K,只有第一个绝对值等于 K 的结点被保留。同时,所有被删除的结点须被保存在另一个链表上。例如给定 L 为 21→-15→-15→-7→15,你需要输出去重后的链表 21→-15→-7,还有被删除的链表 -15→15。输入格式:输入在第一行给出 L 的第一个结点的地址和一个正整数 N(≤105,为结点总数)。一个结点的地址是非负的 5 位整数,空地址 NULL 用 -1 来表示。随后 N 行,每行按以下格式描
2020-10-15 16:33:19 501
原创 数据结构习题—重排链表(结构数组)
#include <iostream>#include <cstdio>using namespace std;typedef struct node{ int address; int data; int next;}List;void nodecopy(List &a,List&b){ //将a复制给b b.address=a.address; b.data=a.data; b.next=a.next.
2020-09-28 21:39:58 592
原创 数据结构习题—一元多项式的乘法与加法运算(链表)
设计函数分别求两个一元多项式的乘积与和。输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。输入样例:4 3 4 -5 2 6 1 -2 03 5 20 -7 4 3 1输出样例:15 24 -25 22 30
2020-09-24 19:18:56 515
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人