- 博客(47)
- 收藏
- 关注
原创 蒟蒻的两年程序竞赛经验
2021 年 4 月 28 日,蓝桥杯成绩出来了,c++ 组 b 组省一。不过大学时间也所剩无几,所以想写一篇经验贴,供同专业的学弟学妹们参考。我首次基础编程是大一下学期的 VB 课 (很难想象 2019 年还在学 VB,不过低一级的学弟学妹们就学 Python 了)。VB 课只学习了最基本的编程,包括顺序结构、循环结构、分支结构以及自己写函数。随后在大一暑假我自学了 C 语言,仅限于用 C 语言实验顺序结构、循环结构、分支结构。期间硬啃谭浩强老师的那本红书,参考过浙江大学翁恺老师的 mooc。毫无疑问
2021-04-28 21:34:09
3591
16
原创 (洛谷官方题单)前缀和与差分
1. P1115 最大子段和解题思路:一维最大前缀和的模板题。对第 i 个数来说,如果前面的 i-1个数的和小于 0,那么加上前面 i-1 个数构成的前缀和不如只有第 i 个数,所以如果前 i-1 个数的和小于 0 则舍弃。#include <iostream>using namespace std;int ma=-99999,sum=0;int main(){ int n,now; cin >> n; while(n--){ cin >> now;
2021-04-16 14:32:56
790
原创 洛谷官方题单【数据结构1-2】二叉树
1.P4715 【深基16.例1】淘汰赛解题思路:分上下半区选取亚军,则前半区最强的与后半区最强的相比较,弱的就是亚军#include <iostream>using namespace std;int x[128];int main(){ int n,sum=1; cin >> n; for(int i=0;i<n;i++){ sum*=2; } for(int i=0;i<sum;i++){ cin >> x[i]; } i
2021-03-17 21:13:55
582
原创 洛谷官方题单【算法1-5】贪心
1.P2240 【深基12.例1】部分背包问题解题思路:用结构体数组存储每堆金币的价值,重量以及单价。使用sort对单价进行排序,从单价最大的金币堆开始取,直到背包装不下为止。如果背包剩余重量大于此时的金币堆直接全部装走,否则装走部分。#include <iostream>#include <algorithm>#include <cstdio>using namespace std;struct jb{ double jz; double zl; do
2021-02-24 20:49:16
511
原创 洛谷官方题单【算法1-4】递推与递归
1.p1255数楼梯解题思路:斐波那契数列+高精度加法一定要用高精度加法,否则只有50分左右#include <iostream>using namespace std;int f[5001][5000]={0};//数组开太大内存会爆掉void jf(int k){//高精度加法,先加再进位 for(int i=0;i<=4999;i++){ f[k][i]=f[k-1][i]+f[k-2][i]; } for(int i=0;i<=4999;i++){
2021-02-15 15:23:24
658
原创 洛谷 P2141 珠心算测验
原题链接这道题需要注意的点是输出有多少个数可以表示成其它两个不同数的和,比较容易写成有多少个等式成立。#include <iostream>#include <cstdlib>using namespace std;int cmp(const void *a,const void *b){ return *(int *)a-*(int *)b;}int main(){ int n,sum=0; cin >> n; int x[n]; for(int
2021-01-27 19:08:06
217
原创 PAT乙级1001 害死人不偿命的(3n+1)猜想(c语言实现)
原题链接很简单一个题,掌握判断偶数和奇数的方法即可。#include <stdio.h>int main(){ int n,sum=0; scanf("%d",&n); while(n!=1){ if(n%2==0){//n整除2时 n=n/2; }else{ n=(3*n+1)/2; } sum++; } printf("%d",sum); return 0;} ...
2021-01-14 23:26:27
228
原创 PTA数据结构与算法题目集7-6 列出连通集(c语言实现)
原题链接一个简单的图的遍历的题,直接上代码。#include <stdio.h>int edge[10][10]={0};int x[11]={0};int dfs(int n,int v){ int i; x[v]=1; printf("%d ",v); for(i=0;i<n;i++){ if(x[i]==0 && edge[v][i]==1){ dfs(n,i); } }}int bfs(int n,int v){ int t[
2020-05-25 23:16:06
550
原创 数据结构与算法题目集7-38 寻找大富翁(c语言实现)
原题链接一道简单的排序题,偷个懒直接用库函数里的qsort函数,需要注意的是如果m>n时,输出n个数#include <stdio.h>#include <stdlib.h>int cmp(const void *a,const void *b){ return *(int *)a < *(int *)b;}int x[1000000]={0};...
2020-05-07 22:32:36
645
2
原创 数据结构与算法题目集7-22 堆栈模拟队列(c语言实现)
原题链接这道题还是有点有趣的,我们首先需要了解堆栈是后进先出,队列是先进先出这一特点,然后根据这一特点来用堆栈模拟队列入队列:s1未满,s2空:元素入栈s1s1满,s2非空:输出错误:已满s1满,s2空:将s1的元素倒入s2,将新元素入栈s1s1未满,且非上面的情况:元素入栈s1if(isfull(s1)!=1 && isempty(s2)){ push(&am...
2020-05-06 09:36:42
842
原创 数据结构与算法题目集7-20 表达式转换(c语言实现)
原题链接这道题需要考虑负数和小数的情况,是否是数组我们用isnumber这个函数来判断。因为小数点不可能单独出现,所以我们认为小数点也是数字的一部分。我们先用一个字符串存储这个表达式,如果当前的字符是数字的一部分,直接输出。如果当前字符是正负号,那么进行如下判断。如果当前字符是第一个字符,那么肯定是数字的正负号;否则如果当前字符的前一个字符既不是 ‘)’ 也不是数字,那么它也是数字的正负号...
2020-05-05 22:05:58
619
原创 数据结构与算法题目集7-21 求前缀表达式的值(c语言实现)
原题链接首先我们将所有数据压到一个栈里,包括运算符号和数字。在这个题里我重新定义了一种变量类型。当no=1时,这个变量存储doule类型的数字,否则存储运算符。从栈顶开始,如果是数字,压到一个double类型的栈里,如果是运算符,从double栈里取两个数字进行计算。若令a为double栈顶数字,b为栈顶的下一个数字,那么令c=a运算符b,并将c压到double栈。大致思想如上所示,在代...
2020-05-05 20:34:56
2876
1
原创 数据结构与算法题目集7-18 银行业务队列简单模拟(c语言实现)
原题链接很基本的一道队列的应用,因为数据量较少,其实可以直接用顺序队列做,下面我们分别给出链队列和顺序队列两种解法:链队列:#include <stdio.h>#include <stdlib.h>typedef struct node{ struct node* next; int data;}lqnode;typedef struct{ struct...
2020-04-29 10:47:24
3351
原创 数据结构与算法题目集7-39 魔法优惠券(c语言实现)
原题链接这道题最主要的问题其实是排序,再接下来要搞清楚如何求得最大收益。最大收益=最大正的优惠卷x最大正的商品+最大负的优惠卷x最大负的商品这里强烈推荐大家使用qsort函数!#include <stdio.h>#include <stdlib.h>int cmp(const void *a,const void *b){ int x=*(int *)a,y=...
2020-04-28 15:17:09
1232
原创 数据结构与算法题目集7-19 求链式线性表的倒数第K项(c语言实现)
原题链接这道题的两种解法:设置一个前置指针,指向当前结点的前k个结点采用头插法,从前向后数k个(效率更高,更简单)下面依次给出两种解法的代码:第一种解法:#include <stdio.h>#include <stdlib.h>typedef struct node{ struct node *next; int data;}lnode;void...
2020-04-27 10:43:12
508
原创 数据结构与算法题目集7-16 一元多项式求导(c语言实现)
原题链接这道题因为没有给多项式有几项,所以我们用下面这个循环语句控制程序的执行。while(scanf("%d %d",&a,&b)!=EOF)每一项输入之后按照系数等于原系数*指数,指数等于原指数-1来输出。注意零多项式要输出 “0 0”#include <stdio.h>int main(){ int a,b,t=1; while(scanf("%...
2020-04-27 09:41:13
758
原创 数据结构与算法题目集7-1 最大子列和问题(c语言实现)
原题链接一个子序列如果小于0,那么它不管怎么与后面相加,目前这个子序列都会减少后续子序列的和,如果掌握这一点,下面的代码不难理解。这道题最终的就是争取时间复杂度为O(n),否则可能会超时,所以我们选择边输入边相加的方式来完成到这题。#include <stdio.h>int main(){ int k,i,j,sum=0,now=0,a; scanf("%d",&k...
2020-04-22 09:31:15
287
原创 数据结构与算法题目集7-53 两个有序序列的中位数(c语言实现)
原题链接这道题最重要的其实是中位数的选取,其中最快的方法应该是同时比较两个链表,比到那个需要输出的那个中位数直接输出。#include <stdio.h>#include <stdlib.h>typedef struct node{ struct node* next; int data;}lnode;void init(lnode **l){ (*l)=...
2020-04-22 08:58:08
772
原创 数据结构与算法题目集7-52 两个有序链表序列的交集(c语言实现)
原题链接这道题的要点分别有:插入的时候函数返回最后一个结点的指针,下次插入直接就不用从头数到尾了,对大量数据插入有很大的帮助。合并时,两个链表插入较小的那一个,如果有一个链表结束了,那么退出循环,将没有结束的链表直接插到新链表的最后面。这个操作对大数据量也很有帮助。因为这道题是有序的链表且要不减输出,所以我们在给出交集的时侯可以做如下判断如果L1链当前的结点小于L2链的当前结点,L...
2020-04-21 23:27:33
521
原创 数据结构与算法题目集7-51 两个有序链表序列的合并(c语言实现)
原题链接这里用到了两个小技巧插入的时候函数返回最后一个结点的指针,下次插入直接就不用从头数到尾了,对大量数据插入有很大的帮助。合并时,两个链表插入较小的那一个,如果有一个链表结束了,那么退出循环,将没有结束的链表直接插到新链表的最后面。这个操作对大数据量也很有帮助。#include <stdio.h>#include <stdlib.h>typedef st...
2020-04-21 23:09:31
455
原创 PTA数据结构与算法题目集7-37 模拟EXCEL排序(c语言实现)
原题链接怎么说呢,这道题我偷懒了。我必须要承认,我偷懒了。但是还是必须要说stdlib.h库中的qsort函数是真的牛逼。建议大家先百度这个函数再来看我的代码,这样会很好懂。#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct{ int xh; char ...
2020-04-13 16:38:35
1068
原创 PTA天梯赛L2-032 彩虹瓶(c语言实现)
原题链接这道题说实话就是题目有点绕,但其实的意思就是堆栈的一个变式应用。最核心的代码我写了注释,感兴趣的朋友可以交流一下。#include <stdio.h>typedef struct{ int stack[1001]; int top;}stack;void init(stack *s){ s->top=0;} void push(stack *s,in...
2020-04-11 23:32:28
2976
3
原创 PTA天梯赛L2-011 玩转二叉树(c语言实现)
原题链接具体思想参照下方链接已知树的中序遍历与前(后)序遍历求二叉树问题下面附上源码#include <stdio.h>#include <stdlib.h>typedef struct node* bintree;typedef struct node{ bintree left; bintree right; int data;}tree;bin...
2020-04-11 13:11:43
1887
原创 PTA天梯赛L2-006 树的遍历(c语言实现)
原题链接具体思想参照下方链接已知树的中序遍历与前(后)序遍历求二叉树问题附上源码:#include <stdio.h>#include <stdlib.h>typedef struct node* bintree;typedef struct node{ bintree left; bintree right; int data;}tree;bint...
2020-04-11 13:07:28
586
1
原创 PTA数据结构与算法题目集(中文)7-23 还原二叉树(c语言实现)
原题链接题目处理的具体思想参照下方链接已知树的中序遍历与前(后)序遍历求二叉树问题附上源码#include <stdio.h>#include <stdlib.h>typedef struct node* bintree;struct node{ bintree l; bintree r; char data;};bintree createbin...
2020-04-11 13:00:48
550
原创 已知树的中序遍历与前(后)序遍历求二叉树问题
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。目前我们给出了三道pta中的习题,通过这三道题我们回顾...
2020-04-11 12:56:51
1769
原创 PTA天梯赛L2-017 人以群分(c语言实现)
原题链接这道题有点扯,一开始读题我都没看懂是什么意思,实际上就是排序,求前后两部分和的差。总人数若为奇数则外向的人多一个,若为偶数则内向外箱的人一样多。然后我用了c语言里面我目前认为最好用的库函数之一,qsort函数,感兴趣的朋友可以去百度。代码如下:#include <stdio.h>#include <stdlib.h>int cmp(const void ...
2020-04-08 15:27:45
1155
原创 PTA天梯赛L2-025 分而治之(c语言实现)
原题链接思路如下:用邻接表存储邻接矩阵,否则遇到稀疏图的时候会出现超时的现象。每个情况下,摧毁一个城市a等价于置a城市相连的城市数为0,与a相连的城市相连城市数减1。如果在摧毁所有目标后依然有城市的相连城市数大于0,那么战略失败,否则战略成功。#include <stdio.h>#include <stdlib.h>int vn1[10010]={0},v...
2020-04-08 11:03:31
1219
原创 PTA数据结构与算法题目集7-32 哥尼斯堡的“七桥问题”(c语言实现)
原题链接在图论里面这是一个相当经典的问题了,如果满足以下两个条件则存在无向图的欧拉回路,否则不存在。每个点的度为偶数图连通这里就涉及用并查集来判断一个图是否连通,并查集的思想参照下方链接超有爱的并查集~这位大佬写的相当好。本题的具体代码如下,对应部分有注释:#include <stdio.h>int pre[1005],num[1005]={0};int fin...
2020-04-07 22:56:42
1247
1
原创 PTA天梯赛L2-008 最长对称子串(c语言实现)
原题链接这道题用的算法时间复杂度是O(n^2) 学有余力的同学可以去看看“马拉车算法”,那个算法解这道题时间复杂度是O(n),但是这个算法这道题也可以过。大概思想如下:首先最外面套一层循环,从第一个字符遍历到最后一个字符。如果对称子串是奇数串,那么最中间的字符我们就不管了。对称子串当前最大长度为1,这时i-j表示指向第i个字符变量左边第j个字符,i+j表示指向第i个字符变量右边第j个字符...
2020-04-07 21:06:37
1103
原创 PTA天梯赛L2-002 链表去重(c语言实现)
原题链接这道题有点折磨人,如果没有接触过链表的初学者确实不太好理解其中的细节,建议做着这道题之前去了解一定的链表知识,如单结点的插入等。具体思想是用数组模拟链表,通过一个地址可以直接访问数组。本来一开始我是想一遍过去直接输出原链表删除完的样子,后来发现这样子还是不太方便理解,改成了重新建立两个数组,依次输出。本题中很多地方都是重复性的,本来写个函数调用就可以了,但是边思考边写代码还是直接复...
2020-04-05 22:20:55
2040
1
原创 PTA天梯赛L1-009 N个数求和(c语言实现)
原题链接这道题说实话还是比较复杂的,对于有些简单的20分题目明显难了些。最后一个测试点的分子是0,不注意处理的话会出现浮点错误,在细节上的实现也很重要,最后就是要记住辗转相除求最大公因数。代码如下:#include <stdio.h>typedef struct{ int fz; int fm;}number;int gcb(int x,int y){ int c,...
2020-04-05 00:24:59
2519
原创 PTA天梯赛L1-039 古风排版(c语言实现)
原题链接这道题还是有点意思的,需要注意的点就是不足的地方要输出空格补全,具体代码如下:#include <stdio.h>#include <string.h>int main(){ int n,len,l,f,i,j; scanf("%d",&n); char c[2000]; getchar(); gets(c); len=strlen(c)...
2020-04-04 22:48:17
771
原创 PTA天梯赛L1-054 福到了(c语言实现)
原题链接这道题真的是…绝了,输入很恶心,输出也很恶心。注意的点就是如果是输出,行和列都要倒过来。代码如下:#include <stdio.h>#include <string.h>char c[1000][1000];int main(){ int n,i,t=1,j; char a; scanf("%c %d",&a,&n); getc...
2020-04-04 22:24:43
1479
原创 PTA天梯赛L1-050 倒数第N个字符串(c语言实现)
原题链接这道题考的是个进制转换的问题,a-z是26进制,我一开始做的时候想成27进制了,不知道有没有人跟我想的一样呢(逃)。搞清楚进制之后就很容易做了,但是还不要忘记一点就是n-1,因为倒数第一个数是一堆z。代码如下:#include <stdio.h>int main(){ int l,n,i; scanf("%d %d",&l,&n); n=n-1;...
2020-04-04 21:04:53
1386
5
原创 PTA天梯赛L1-046 整除光棍(c语言实现)
原题链接这道题不能用暴力算法啦,要用模拟除法。以原题为例,你在纸上写上一长串的1,比如11111111111111111。这总共是17个1,下面列竖式去除31。你会发现当除到第15个1的时候31整除了这个数,所以我们的答案就是15个1。这样子可以极大的减少时间复杂度。代码如下:#include <stdio.h>int main(){ long long t=1,n; i...
2020-04-04 20:36:26
871
原创 PTA天梯赛L1-034 点赞(c语言实现)
原题链接这道题不难,我发现用一个大数组保存信息这一招相当有用,易于理解且便于实现,代码如下:#include <stdio.h>int main(){ int n,i,j,k,t,num; int a[1001]={0}; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&k); for(j=0;j&...
2020-04-04 10:53:24
1159
2
原创 PTA天梯赛L1-032 Left-pad(c语言实现)
原题链接这个题还是老生常谈的输入输出问题,需要注意的点如下:scanf输入遇到空格停止但不会吸收空格,在空格之后如果我们需要输入一个字符的时候应该先getchar();gets();之前有回车键,依然需要一个getchar()去吸收;代码如下#include <stdio.h>#include <string.h>int main(){ int n,i;...
2020-04-03 22:25:26
616
原创 PTA天梯赛L1-020 帅到没朋友(c语言实现)
原题链接这道题读的我有点云里雾里的,最关键的一点是如果朋友圈只有一个人那么他就不是因为帅而没有朋友(这个理解大概是对的吧,这道题真的有点迷)下面附上代码#include <stdio.h>int main(){ int num[100000]={0}; int n,i,m,p,k,t=1,j,f=1; scanf("%d",&n); for(i=0;i<n...
2020-04-03 21:03:06
1033
1
原创 PTA天梯赛L1-011 A-B(c语言实现)
原题链接这道题就要用巧的办法去做,极少的代码实现这道题!代码如下,不难懂#include <stdio.h>#include <string.h>int main(){ char a[10001],b[10001]; int c[130]={0},i,j; gets(a); gets(b); for(i=0;i<strlen(b);i++){ ...
2020-04-03 20:08:52
3473
8
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人